Kohana 3.1 маршруты с подкаталогами по умолчанию - PullRequest
0 голосов
/ 28 августа 2011

У меня есть приложение, которое по существу работает, пока я не попытался реализовать модуль Auth для входа и регистрации.

Структура каталога моего приложения в основном:

application
-- classes
  -- controller
     -- admin
        (admin area)
     -- block
        (blocks to display within pages)
     -- page
        (default pages)

По умолчанию я хочу иметь URL-адреса, такие как http://www.testsite.com/test, которые будут обращаться к классу Controller_Page_Test. Или явным образом вызвать администратора или заблокировать страницы http://www.testsite.com/admin/test, которые будут обращаться к классу Controller_Admin_Test. Чтобы еще больше усложнить ситуацию, он также должен обрабатывать необязательные действия и идентификаторы.

Я сказал сверху, что это в основном работает правильно - пока я не попытался добавить модуль Auth. Модуль Auth вызывает http://www.testsite.com/user/login, но вместо доступа к пути модуля по умолчанию он ищет в каталоге страниц.

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

Мои маршруты сейчас выглядят так:

Route::set('user', '(<controller>(/<action>(/<id>)))', array('controller' => 'user|admin_user'))
    ->defaults(array(
        'controller' => 'user',
        'action'     => 'index',
        'id'         => NULL,
    ));

Route::set('with_dir', '<directory>/<controller>(/<action>(/<id>))', array('directory' => 'block|admin'))
    ->defaults(array(
        'directory'  => 'page',
        'controller' => 'home',
        'action'     => 'index',
    ));

Route::set('just_id', '<controller>(/<id>)', array('id' => '\d+'))
    ->defaults(array(
        'directory'  => 'page',
        'controller' => 'home',
        'action'     => 'index',
    ));

Route::set('auto_dir', '<controller>(/<action>(/<id>))', array('id' => '\d+'))
    ->defaults(array(
        'directory'  => 'page',
        'controller' => 'home',
        'action'     => 'index',
    ));


Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'prototype',
        'action'     => 'index',
    ));

Можно ли это лучше убрать? И как мне заставить этот модуль включаться только тогда, когда он мне нужен?

1 Ответ

1 голос
/ 29 августа 2011

Да, его можно почистить лучше. Разработчики Kohana рекомендуют людям, использующим этот фреймворк, добавлять столько маршрутов, сколько необходимо . Вы можете даже указать их для каждого действия, которое позволит вам изменять URL-адреса в будущем (например, вместо /user/login вы можете захотеть иметь /signin), если вы используете надлежащие методы для создания ссылок и т. Д. (Например, Route::url() помощник).

Теперь, говоря это, вот другой способ указать маршрут user:

Route::set('user', '<controller>(/<action>(/<id>))', array('controller' => '(user|admin_user)'))
    ->defaults(array(
        'controller' => 'user',
        'action'     => 'index',
    ));

Который будет соответствовать только запросам, где указана первая часть URI и равна user или admin_user. Ранее часть контроллера была необязательной, поэтому она также соответствовала вызовам на / URI.

...