0

URLからコントロール名を取得し、index.phpで動的に正しいコントローラーと一致させようとしています。

私のアプリルート:/localhost/app/index.php

つまり、基本的に/localhost/app/index.php/homeと入力すると、home_controller.phpを含めようとします。これがコードです。

 $parts = array_slice(explode('/',$_SERVER["REQUEST_URI"]),3);
 if(file_exists(dirname(__FILE__)."/controllers/".$parts[0].'_controller.php'))
 {
    include dirname(__FILE__)."/controllers/".$parts[0].'_controller.php';
 }

アプリのルート深度が3の場合は正常に機能します。localhost/first/ second / app / index.php/homeのようなアプリディレクトリを変更すると壊れます。

3で爆発するため、$ components [0]は「ホーム」ではなくなります。問題は、コントローラーパーツをより効率的に検出するにはどうすればよいかということです。

4

2 に答える 2

1

$ _SERVER paht_info変数を使用して、コントローラー部分を計算しました。

  $segments = array_slice(explode("/", $_SERVER["PATH_INFO"] ),1);

$ segment配列のゼロインデックスはコントローラー部分であり、他の部分は関数です。ところで、配列の境界と、path_infoが設定されているかどうかを確認する必要があります。

于 2011-10-08T12:37:20.347 に答える
0

/localhost/app/index.php/home localhost / first / second / app / index.php / homeは、文字列を$parts[0]の部分がapp/ index.php/homeのように見せているように聞こえます。これは無効です。道。これを処理する唯一の方法は、区切り文字として/を使用してその文字列を展開するか、配列の最後の文字列をそれぞれを比較または実行する場所として使用することです。MVCの概念は、URLは常にパート1と同様に構造化されていますが、この場合はコントローラーを決定するために必要です。2+は通常、コントローラーからの関数へのパラメーターを参照するために使用されます。

于 2011-10-07T22:15:36.177 に答える