2015-11-03 2 views
0

Я посмотрел вокруг и в то время как есть ряд подобных вопросов к этому, ответ никогда не был дан, что работает:CakePHP обратная маршрутизация не работает

Я использую CakePHP 3.0. Я пытаюсь подключить и связать некоторые базовые URL-адреса страницы с каркасом.

С точки зрения нормальной маршрутизации это сработало, как ожидалось. Для целей отладки я раздели все маршруты, так что следующие единственные активные маршруты в данный момент:

Router::scope('/', function ($routes) { 
    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home', '_name' => 'home']); 
    $routes->connect('/events', ['controller' => 'Pages', 'action' => 'display', 'events', '_name' => 'events']); 
    $routes->fallbacks('DashedRoute'); 
}); 

Если вручную перейти к / или /events эти работы, как и ожидалось.

Теперь, если я попытаюсь маршрут назад (как лучшая практика), я использую следующее:

echo $this->Html->link('News', ['controller' => 'Pages', 'action' => 'home', '_full' => true]); 

.. и ..

echo $this->Html->link('Events', ['controller' => 'Pages', 'action' => 'events', '_full' => true]); 

Это неправильно дать мне /pages/home и /pages/events , Фактически, / и /events - это то, что требуется.

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

Может ли кто-нибудь объяснить, как правильно это сделать?

Благодаря

Рик

ответ

1

Вызов connect() немного неправильно. Параметр _name должен быть в третьем аргументе вызова функции:

$routes->connect('/events', ['controller' => 'Pages', 'action' => 'display', 'events'], ['_name' => 'events']); 

Таким образом, вы можете просто использовать название маршрута в шаблоне:

$this->Html->link('Events', ['_name' => 'events']); 
+0

Большое спасибо. Вторая пара глаз, и это очевидно. – elb98rm

Смежные вопросы