2014-10-01 4 views
0

Я настроил свои маршруты так, чтобы большинство классов вызывались в стандартном стиле controller/action. Однако для моего внешнего интерфейса я не хочу, чтобы пользователи видели вызываемое действие, поэтому все интерфейсные страницы имеют свой собственный контроллер и используют действие индекса. Это мои маршрутизаторы в бутстрапе:Kohana 3.2 routing issue

Route::set('normal', '<controller>(/<action>(/<arguments>))', 
    array(
     'arguments'  => '.*' 
    )) 
    ->defaults(array(
     'controller' => 'admin', 
     'action'  => 'index', 
    )); 

Route::set('default', '(<controller>(/<arguments>))', 
    array(
     'arguments'  => '.*', 
    )) 
    ->defaults(array(
     'controller' => 'home', 
     'action'  => 'index', 
    )); 

В настоящее время у меня есть три передних страницы, главная, about_us и сервисы. Все они отлично работают, если я не передаю какие-либо аргументы через URL-адрес, но проблема возникает, если я попытаюсь передать аргумент через URL-адрес в аргументы. В службах есть только action_index(), чтобы отобразить страницу, и она проверяет любые аргументы и отображает результаты на основе аргумента. Однако, если я пытаюсь перейти к /services/1 пройти в 1 в качестве аргумента я получаю эту ошибку 404:

Kohana_HTTP_Exception [ 404 ]: The requested URL services/1 was not found on this server. 

Он просто использует первый маршрут, нормальный. Как только он не сможет найти действие, он даже не пытается использовать второй маршрут, который будет работать. Если я поменяю порядок маршрутов, то он работает, но все мои другие классы, которые используют первый контроллер, перестают работать, так как все мои действия передаются в action_index() в качестве аргументов.

Как я могу заставить это работать? Почему, когда первый маршрут не работает, Кохана не переходит на второй маршрут?

+0

Попробуйте syntanx: 'Route :: набор ('нормальный', '(/ (/ (/ )))', и' Маршрут: : set ('default', '(/ (/ ))', ' – DanR

ответ

-1

Вам не нужно создавать контроллер по маршруту. Вы можете создавать собственные маршруты (имена маршрутов) и указывать имя контроллера и действия. Прочтите документацию для дальнейшего объяснения. Routing

Аргументы попробовать это:

Route::set('default', '(<controller>(/<arguments>))', 
    ->defaults(array(
     'controller' => 'home', 
     'action'  => 'index', 
    )); 
+0

Разве это не то же самое, что у меня уже есть, кроме правила для аргументов? – Styphon