[Codeigniter-users] バグでしょうか?

Back to archive index

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




Codeigniter-users メーリングリストの案内
Back to archive index