2013-08-21 4 views
0

У меня есть настройки маршрута, который выглядит следующим образом:Использование параметров маршрута по умолчанию для необязательного Kohana :: Маршрут URL

Route::set('my_route', 'r/<controller>(/<action>)(/(<name>-)<hash>)', array(
    'controller' => '[a-z]+', 
    'action'  => '[a-z]+', 
    'hash'   => '\w{13}', 
    'name'   => '[a-z]+', 
))->defaults(array(
    'directory'  => 'my_dir', 
    'controller' => 'welcome', 
    'action'  => 'index', 
    'name'   => null, 
)); 

, который работает сам по себе. Проблема возникает, когда я пытаюсь построить URL из маршрута, например:

return Route::url('my_route', array(
    'action' => 'test', 
)); 

Я получаю сообщение об ошибке:

Kohana_Exception [ 0 ]: Required route parameter not passed: name 

Так что, если я установить имя null, я получаю то же самое результат. Если установить имя false, нет никакого сообщения об ошибке, но URLs выглядеть следующим образом:

/r/welcome/test/-

уведомление, - на конце? Теперь я мог бы снять это, но я надеюсь, что есть лучший способ.

ответ

1

Мне кажется, что вы пытаетесь исправить свою маршрутизацию, используя 1 маршрут для всех. Это неправильный способ сделать что-то.

Просто сделайте несколько маршрутов (возможно, вам придется настроить это):

Route::set('my_route', 'r/<controller>(/<action>)/(<name>-)<hash>', array(
    'controller' => '[a-z]+', 
    'action'  => '[a-z]+', 
    'hash'   => '\w{13}', 
    'name'   => '[a-z]+', 
))->defaults(array(
    'directory'  => 'my_dir', 
    'controller' => 'welcome', 
    'action'  => 'index', 
    'name'   => null, 
)); 

Route::set('my_route2', 'r/<controller>(/<action>)', array(
    'controller' => '[a-z]+', 
    'action'  => '[a-z]+', 
    'hash'   => '\w{13}', 
    'name'   => '[a-z]+', 
))->defaults(array(
    'directory'  => 'my_dir', 
    'controller' => 'welcome', 
    'action'  => 'index', 
    'name'   => null, 
)); 

Помните система маршрут действительно мощный и больше маршрутов не означает, что он становится медленнее. Так что просто сделайте так много четко возможных маршрутов и не пытайтесь запускать все по 1 маршруту.