2015-10-22 3 views
0

Я пытаюсь получить довольно URL-адрес с маршрутизатором с Cake.Cake PHP 3 Paring Routing с таблицей

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 и продолжайте. Каков наилучший способ сделать это?

Мое предположение было бы быть, чтобы направить весь трафик на контроллер Route

Router::connect('/*', array('controller' => 'Routes', 'action' => 'redirs')); 

Но когда он перенаправляет я хочу, чтобы показать симпатичную URL в браузере, я не хочу, чтобы показать статьи/зрения/12

спасибо

ответ

0

Вы можете либо динамически создавать маршруты с информацией, полученной из базы данных, или использовать пользовательский класс маршрута, который ищет таблицу. Если у вас есть только несколько маршрутов, вы можете использовать первый.

В вашем 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] 
     ] 
    ); 
} 

Для чего-то динамичного, проверьте, например Mapping slugs from database in routing