Несколько дней назад я научился создавать базовый маршрутизатор, который сопоставляет URL-адреса с контроллерами. Теперь мне нужно улучшить его, чтобы создать лучший маршрутизатор с расширенными функциями. Чтобы создать лучший маршрутизатор, работающий со скрытыми входами, прежде всего удалите базовый файл router.php из проекта и создайте новый. Давайте начнем.
Нам нужно создать лучший маршрутизатор, который эффективно сопоставляет URL-адреса с конкретными контроллерами или действиями, позволяя нашему приложению обрабатывать запросы и направлять их соответствующим обработчикам.
Способность лучшего маршрутизатора работать со скрытыми входами позволяет безопасно удалять заметки, передавая идентификатор заметки контроллеру, не раскрывая его в URL-адресе, предотвращая вмешательство пользователя.
Чтобы создать файл маршрутизатора, нам необходимо инициализировать класс Router с пространством имен, в данном случае Core.
Открытые функции (общие параметры)
Поскольку класс маршрутизатора создан, мы должны определить в нем общедоступные функции, и все они имеют одинаковые параметры, такие как получение, публикация, удаление, исправление и размещение, в качестве основных маршрутов, которые помогают нашему веб-сайту определить, что делать, когда кто-то посещает определенный страница. Эти функции имеют одинаковые параметры, что позволяет им выполнять одни и те же действия.
public function get($uri, $controller) { $this->add('GET', $uri, $controller); } public function post($uri, $controller) { $this->add('POST', $uri, $controller); } public function delete($uri, $controller) { $this->add('DELETE', $uri, $controller); } public function patch($uri, $controller) { $this->add('PATCH', $uri, $controller); } public function put($uri, $controller) { $this->add('PUT', $uri, $controller); }Добавить метод
Поскольку все общедоступные функции имеют одинаковые параметры, мы используем метод add и присваиваем ему одинаковые параметры и вызываем его только в других функциях. Он используется для добавления нового маршрута в карту маршрутизации, принимая три параметра: метод запроса, соответствующий шаблон URI и файл контроллера для обработки запроса.
public function add($method, $uri, $controller) { $this->routes[] = [ 'uri' => $uri, 'controller' => $controller, 'method' => $method ]; }Метод маршрута
Здесь мы определяем метод маршрута для определения ответа нашего приложения на заданный URL-адрес, сопоставляя его с соответствующим контроллером для обработки запроса.
public function route($uri, $method) { foreach ($this->routes as $route) { if ($route['uri'] === $uri && $route['method'] === strtoupper($method)) { return require base_path($route['controller']); } } $this->abort(); }функция strtoupper
В методе маршрута мы используем функцию strtoupper для преобразования строки в верхний регистр, обеспечивая совпадение без учета регистра.
strtoupper($method)Защищенная функция (прерывание)
В файле router.php мы определили метод прерывания как страховочную сеть, отображающую страницу с ошибкой, если наш веб-сайт не может найти правильный маршрут.
protected function abort($code = 404) { http_response_code($code); require base_path("views/{$code}.php"); die(); }Определения маршрутов
Последнее, что нужно сделать, это определить конфигурацию маршрутизации в файле Routes.php, сопоставляя URL-адреса с соответствующими действиями контроллера.
$router->get('/', 'controllers/index.php'); $router->get('/about', 'controllers/about.php'); $router->get('/contact', 'controllers/contact.php'); $router->get('/notes', 'controllers/notes/index.php'); $router->get('/note', 'controllers/notes/show.php'); $router->get('/notes/create', 'controllers/notes/create.php');Метод get определяет метод запроса (GET), шаблон URL-адреса и сопоставляет его с файлом контроллера.
Заключение
В заключение мы создали более совершенный маршрутизатор, который эффективно сопоставляет URL-адреса с конкретными методами контроллера, обеспечивая более структурированный и удобный подход к обработке запросов и улучшая общую производительность и масштабируемость нашего веб-сайта.
Надеюсь, вы это ясно поняли.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3