1

ルーティングにToroPHPを使用しています。

私のコード:

Toro::serve(array(
    "/" => "home",
));

Toro::serve(array(
    "/website/:string" => "website",
));

// Fired for 404 errors
ToroHook::add("404",  function() { echo '404 error'; });

その他のコード

Toro:serveはこのクラスに移動し、との両方homeで正常に機能しwebsiteます。

class home {
    function get() {
        echo 'My home';
    }
}

class website {
    function get($slug) {
        echo $slug;
    }
}

Htaccess

これは私のhtaccessファイルがどのように見えるかです。ローカルホストで動作するように少し書き直されています。

最後の行を見てください...

RewriteEngine On
RewriteBase /my_localhost_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^(.+)$ index.php/$1 [L]

問題

設定したページに移動するとToro::serve、問題なく動作します。

定義されていないURLにアクセスすると、白い画面が表示されます。

追加したフックで「404エラー」が出ると思います。私は何を間違えますか?

例: / nocontent /に移動すると、白い画面が表示され、200okと応答します。

4

2 に答える 2

3

私はフックの定義が最初に来なければならないと信じています、すなわち

<?php

ToroHook::add("404",  function() {
    header('HTTP/1.1 404 Not Found');
    echo '404 error';
    exit;
});

Toro::serve(array(
    "/" => "home",
    "/website/:string" => "website",
));

また、ドキュメントに従って、すべてのリクエストをindex.phpに書き換える.htaccessファイルがあることを確認してください。私は知っておくべきです、プロジェクトへの貢献者です;)

さらに、;への呼び出しは1つだけにする必要があります。Toro::serve()上記の例のように、URLパターンをキーとして、呼び出すルートを値として配列を渡すだけです。

于 2012-11-08T14:30:07.130 に答える
1

すべてのリクエストをindex.phpにリダイレクトするようにしてください。これは、mod_rewriteを使用して実行されます。以下を.htaccessフォルダーに配置します。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ /index.php/$1 [L]

第二に、あなたはToro::serve間違った方法を使用しています。提供するために複数の呼び出しを行うべきではありません。代わりに、最初の呼び出しに複数のルートを渡します。

Toro::serve(array(
    "/" => "home",
    "/website/:string" => "website",
));

最後に、serveを呼び出す前に404フックを追加します。それ以外の場合は見つかりません:

ToroHook::add("404",  function() {
    echo "404 - Not Found";
});
于 2012-11-08T14:25:59.050 に答える