ToroPHP路由 - 404动作

时间:2012-11-08 12:19:34

标签: php http-status-code-404 routes

我正在使用ToroPHP进行路由。

我的代码:

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

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

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

更多代码

Toro:发送到此课程,适用于homewebsite

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

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

的.htaccess

这就是我的htaccess文件的样子。在localhost上工作只是一点点改写。

查看最后一行......

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设置的页面,它就可以正常工作。

如果我转到未定义的网址,则会显示白屏。

我希望通过我添加的钩子能给我“404错误”。我做错了什么?

示例:如果我转到/ nocontent /它会给我一个白色屏幕,并且响应200 ok。

2 个答案:

答案 0 :(得分:3)

我认为钩子定义必须首先,即

<?php

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

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

此外,请确保您有一个 .htaccess 文件,根据文档将所有请求重写为 index.php 。我应该知道,作为该项目的贡献者;)

此外,只应对Toro::serve()进行一次调用;您只需将一个数组传递给它,并将URL模式作为键,并按照上面的示例调用该值作为值。

答案 1 :(得分: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-hook。否则,将无法找到:

ToroHook::add("404",  function() {
    echo "404 - Not Found";
});