Kohana 3 Route :: Сделать второй маршрут по умолчанию? - PullRequest
0 голосов
/ 05 марта 2012

Я пробовал это:

Route::set('default_controllers', '(<controller>(/<action>(/<id>)))')
 ->defaults(array(
    'controller' => 'welcome',
    'action'     => 'index',
));
Route::set('default', '<uri>')
 ->defaults(array(
  'controller' => 'cms',
  'directory' => 'cms',
  'action'     => 'render',
 ));

Но на самом деле я хочу, чтобы 'default' (с действием рендеринга) был первым, чем default_controllers.

Я хочу, чтобы он сначала проверил все контроллеры, и если ничего нет, то он должен запустить второй режим по умолчанию, render. Render проверяет URI в базе данных и возвращает страницу, если она существует, иначе выдает ошибку.

Если я включаю положение маршрута двух, поэтому маршрут «по умолчанию» предшествует «default_controllers», тогда он отлично работает со страницами cms, но не с контроллерами (так как он не ищет дальнейшие маршруты после рендеринга Функция выдала ошибку, что страница не существует.)

Что мне здесь делать? Как я могу заставить их обоих работать?

Ответы [ 2 ]

1 голос
/ 05 марта 2012

У вас есть два основных маршрута. Вы должны удалить один из них и сделать свои маршруты более конкретными. Маршрут (<controller>(/<action>(/<id>))) на самом деле очень плох и приведен только в качестве примера.

0 голосов
/ 09 марта 2012

Чтобы это сработало, вы должны указать маршрут для загрузки контроллеров.

Route::set('default_controllers', '(<controller>(/<action>(/<id>)))', array(
   'controller' => 'controller|anotherController|etcController'
))
 ->defaults(array(
    'controller' => 'welcome',
    'action'     => 'index',
));

Если вы хотите, вы можете написать класс, чтобы искать контроллеры и кэшировать результат, чтобы не увеличивать время загрузки. Затем вы передадите это значение в значение ключа контроллера в массиве.

Ваш другой маршрут может остаться таким, каким он был у вас:

Route::set('default', '<uri>')
 ->defaults(array(
  'controller' => 'cms',
  'directory' => 'cms',
  'action'     => 'render',
)); 
...