Как обрабатывать не найденные маршруты в моем роутере - PullRequest
0 голосов
/ 05 ноября 2018

Так что моя проблема в том, что я понятия не имею, как обрабатывать обработку страниц, не найденных, так как маршрутизация запускается каждый раз, когда добавляется маршрут, если вы делаете что-то кроме первого маршрута, у него будет 2 выхода.

routes.php

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

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

?>

Routes.php (класс)

<?php
  class Route {
    public static $validRoutes = array();
    public static function set($route, $function) {
        self::$validRoutes[] = $route;
        $url = $_GET['url'];
        if($url == $route) {
            $function->__invoke();
            die();
        }
        if(!in_array($url, self::$validRoutes)) {
            Controller::CreateView("404");
            die();
        }
  }
  }
 ?>

Я пытаюсь понять, как бы я справился, если бы его не нашли.

1 Ответ

0 голосов
/ 05 ноября 2018

Как насчет чего-то вроде:

<?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 :: маршруты, чтобы использовать пути в качестве ключей.

При разрешении, если путь не может быть найден (индекс не существует), он попытается проверить наличие ключа '404' в массиве маршрутов. В противном случае он отвечает с основным 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...