0

アップデート

に行くと/about/、次のようになります。

Route: contact
Get Param: about

に行くと/contact/、次のようになります。

Route: about
Get Param: contact


これが私のコードです:

foreach ($routes as $route) {
            if (preg_match('/^' . $route . '$/', $uri)) {
                $controller = 'controllers/' . $route . '.php';

                if (file_exists($controller)) {
                    include_once($controller);
                } else {
                    echo '<h1>404 - Missing Controller</h1>';
                }
            } else {
                echo '<h1>404 - Missing Route</h1>';
            }
}

問題は、「Missing Route」が常に表示されることです...ここで私の問題は何ですか?

を置き換えても同じ問題が発生preg_matchしますif ($uri == $route)

$routes = Array ( [0] => about [1] => contact )
$uri =contact

ディレクトリ構造:

controllers/
      About.php
      Contact.php
Router.php

ご協力いただきありがとうございます!

4

2 に答える 2

1

あなたのelse条件は、一致するものを除くすべてのインデックスに対して実行されています。

私があなたがする必要があると思うのは:

if(in_array($uri, $routes) {
            $controller = 'controllers/' . $uri . '.php';
            if (file_exists($controller)) {
                include_once($controller);
            } else {
                echo '<h1>404 - Missing Controller</h1>';
            }
 } 
 else {
            echo '<h1>404 - Missing Route</h1>';
      }

また、コントローラ名が大文字で始まる場合は、最初の文字を大文字にする $controller 変数を作成するロジックを追加する必要があります。

于 2012-12-28T21:25:47.573 に答える
1

なぜ preg_match を使用しているのですか?

if (preg_match('/^' . $route . '$/', $uri))

と同じです

if ($route == $uri)

なんらかの理由で正規表現のメタ文字を入れたい場合を除きます。$route

また、出力には 404 があると表示されていますが、実際には 404 の HTTP 応答を返していますか?

于 2012-12-28T21:16:24.913 に答える