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

Back to archive index

tsujioka tsuji****@m-s*****
2008年 6月 8日 (日) 22:39:12 JST


kunitsujiです

たとえば、問題があるということになると次のようなケースでしょうか?
localhost/index.php/diary/
これでwelcom.phpが開きます。
デフォルトコントローラが開くということですね。
けど、この場合diaryディレクトリが指定されています。
DiaryディレクトのWelcomコントローラならいいと思いますが、意図せず
トップのでふぉるとがひらいていますよね?
意図しているということであれば仕様ですが、
Diaryディレクトリがあるかないかは通常利用者からは見えません。
index.php/hoge/
とやった場合、存在してないコントローラですと404をかえすなら、
Diary/でデフォルトコントローラがない場合は404が普通だと思いました。
Diaryディレクトリの下のものを、と期待してしまいます。
localhost/index.php/diary/
localhost/index/php/hoge/
同じようなURLでもディレクトリがあればトップのデフォルトコントローラが開き、
ないものは404というのはおかしい気がします。
hoge/の場合でもデフォルトが開くなら仕様として同じといえますが。。


> 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 mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users 




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