Я пытался получить красивый URL с маршрутизатором с Cake.
www.mysite.com/category/slug
www.mysite.com/slug
www.mysite.com/category/
Я думаю, что нет формулы, чтобы получить именно то, что я хочу, поэтому я хочу явно сопоставить каждый URL. Я хочу, чтобы моя таблица маршрутов выглядела так
id | url | controller | action | param
Поэтому, когда кто-то идет в
www.mysite.com/mysubcategory/my-title-of-page
Я хочу, чтобы он сопоставил ссылку «mysubcategory / my-title-of-page» со столбцом url и продолжил. Каков наилучший способ сделать это?
Я предполагаю, что будет направлять весь трафик на контроллер маршрута
Router::connect('/*', array('controller' => 'Routes', 'action' => 'redirs'));
Но когда он перенаправляет, я хочу, чтобы он отображал симпатичный URL в браузере, я не хочу, чтобы он отображал статьи / view / 12
благодарю вас
Вы можете либо динамически создавать свои маршруты с информацией, полученной из базы данных, либо использовать собственный класс маршрутов, который просматривает таблицу. Если у вас есть только несколько маршрутов, то вы можете использовать первый.
В вашем routes.php
просто прочитайте свою таблицу и соедините маршруты, это должно быть так просто. Вот очень простой пример:
use Cake\ORM\TableRegistry;
$Routes = TableRegistry::get('Routes');
$routes = $Routes->find();
foreach ($routes as $route) {
Router::connect(
$route->url,
[
'controller' => $route->controller,
'action' => $route->action
],
[
'pass' => [$route->param]
]
);
}
Для чего-то динамического, проверьте, например, Отображение слагов из базы данных при маршрутизации
Других решений пока нет …