如何处理路由器中找不到的路由

时间:2018-11-05 18:22:10

标签: php routing

所以我的问题是,我不知道如何处理未找到的页面,因为如果您执行除第一个路由以外的任何其他操作,则每次添加路由时都会运行路由,它将有2个输出。

Routes.php     

database-platform: org.hibernate.dialect.MySQLDialect

Routes.php(类)

Route::set('index.php', function() {
 Index::CreateView('Index');
});

 Route::set('test', function() {
  Test::CreateView('Test');
});

?>

我试图了解如果找不到它该如何处理。

1 个答案:

答案 0 :(得分:0)

怎么样?

<?php
class Router
{
    public $routes = [];

    public function add($route, $function)
    {
        $this->routes[$route] = $function;
    }

    public function route($path)
    {
        $function = 
            $this->routes[$path] ??
                $this->routes['404'] ?? null;

        if(is_null($function)) 
            http_response_code(404) && exit('404 Not Found.');

        $function->__invoke();
    }
}

$router = new Router;
$router->add('foo', function() {
    echo 'bar';
});
$router->add('greeting', function() {
    echo 'hello earth';
});
$router->route('greeting');

输出:

hello earth

您可以添加所有路由,而不是在每次添加路由时都尝试解析路由。

我简化了Router :: routes数组,将路径用作键。

在解析时,如果找不到路径(索引不存在),它将尝试在routes数组中检查'404'键。未能通过基本404进行响应。