Kenji
kenji****@club*****
2008年 6月 8日 (日) 17:32:29 JST
Kenji です。 このパッチですが、rsegments の話とは別(一部からみますが)のデフォルトコントローラ が何か?という仕様の問題じゃないかと思います。 ということで、本家フォーラムに投げてみました。 http://codeigniter.com/forums/viewthread/81744/ 実際、現状の仕様だと、どういう問題が生じるのか、あげた方がいいと思います。 On Wed, 4 Jun 2008 01:05:19 +0900 "tsujioka" <tsuji****@m-s*****> wrote: > kunitsujiです。 > > パッチの前に説明を。 > > http://localhost/index.php > この場合、デフォルトコントローラーが > welcome > で指定されている場合、 > 自動的に次のようになります。 > http://localhost/index.php/welcome > > で存在しないコントローラを指定した場合、404になります > http://localhost/index.php/hoge > > application/controllers/hoge/top.php > というものが存在している場合、どうなりますか? > 実際には、これは > http://localhost/index.php/welcome > これと同じものが開きます。。。。。 > ディレクトリがある場合、index.php/hoge/ > と入力すると、デフォルトコントローラーが呼ばれてしまいます。 これ自体は、わざわざそうなっているということは、仕様だと 考えざるをえないですね。 > Router.phpの216行目 > if ( ! > file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT)) > { > $this->directory = ''; > return array(); > } > array()をかえしてしまっているので、エラーとして処理されません。 > 先日のrsegmentsがおかしいのもここが影響していますね。 > この場合 > if ( ! > file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT)) > { > $this->directory = ''; > show_404(); > } > > とするのが正しいと思いますが、どうでしょう? そう考えることもできますが、そのディレクトリにコントローラがない場合に 呼ばれるのがデフォルトコントローラとすれば、現状の実装も誤りとはいえないと 思います。 上記のパッチでは、単にエラー表示して終了なので、rsegments の値は、関係 なくなりますね。 > ディレクトリが存在して、その下にデフォルトコントローラーと同じ > welcomeコントローラーが存在すればOKですが、ない場合は404を返したほうがいいと思います。 > パッチ > Index: system/libraries/Router.php > =================================================================== > --- system/libraries/Router.php (revision 16) > +++ system/libraries/Router.php (working copy) > @@ -216,7 +216,7 @@ > if ( ! > file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT)) > { > $this->directory = ''; > - return array(); > + show_404(); > } > > } > > いや、これが正しい動きならいいですが、バグだと思われるので検証していただければ。 > > Kenjiさん、よろしくです。 > もっとよくみたら、$this->directory = ''; > もおかしですよね。。ディレクトリがあるのを認識しているのに’’にしている。 > show_404()の上の$this->directory = '';も消してもいいかもしれません。 それは、デフォルトコントローラに合わせているということでしょうね。 要するに、デフォルトコントローラというのは、トップのディレクトリに ひとつだけ存在するものだということなんでしょう。 > 簡単な例として、inkTypeのadmin > で検証してもらえればすぐわかります。 > inkType.jp/index.php/admin/ > これだとTOPが開くはず。 > controllers/にadminコントローラーがあるのであればそれが開くはずだし、ありません。 > これはadmin/adminとしたら正常に動きます。 > adminディレクトリにadminコントローラが見つかった場合ですね。 > > kunitsuji > > _______________________________________________ > Codeigniter-users mailing list > Codei****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users