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 参加这个课程,工作正常,对于homewebsite

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

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

访问

这就是我的 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,它工作得很好。

如果我转到一个未定义的 URL,它会给我一个白屏。

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

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

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",
));

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

此外,应该只有一次调用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-hook。否则,将找不到:

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