Кохана Иерархические маршруты с подстраницами - PullRequest
0 голосов
/ 22 января 2011

Я бы хотел настроить некую иерархическую маршрутизацию в Kohana 3.0.9. Маршрутизация должна поддерживать страницы и подстраницы, которые могут выглядеть примерно так:

URL называется: http://example.com/company/contact/

Возможный маршрут: <page>(/<subpage>(/<action>))

Проблема с вышеупомянутым маршрутом состоит в том, что он поддерживает только иерархию с двумя уровнями. Если бы сайт должен был обрабатывать «подподстраницы», такие как http://example.com/company/contact/sub, мне пришлось бы изменить маршрут.

Кроме того, я бы хотел, чтобы один одностраничный контроллер обрабатывал запрос. Например, он может принять company/contact/sub в качестве строкового параметра. Мне известно о ключе <directory>, и я не собираюсь его использовать.

Есть ли способ сделать маршрут "совместимым" с неограниченным количеством вложенных страниц?

Заранее спасибо за ваши ответы.

1 Ответ

1 голос
/ 22 января 2011

Если вы посмотрите на раздел МАРШРУТ, вы можете создавать собственные шаблоны REGEX.(читайте здесь) http://kohanaframework.org/guide/kohana/routing

По умолчанию «параметры» маршрутизации удаляют пунктуацию.

Вы можете настроить регулярное выражение для принятия "/".

Затем вы можете получитьпоследний параметр и взорвать его с помощью $iece = explode ("/", $ pizza);

Пример: http://example.com/company/contact/subpage/subsubpage/action

Route::set('multilevel', '(<controller>(/<page_levels>/<action>))'
, array('page_levels' => '.*'))
    ->defaults(array(
        'controller' => 'page_controller',
        'action'     => 'index',
    ));

Двойная проверка REGEX, но в основном он захватывает все "/ "за исключением самого последнего (который должен быть вашим разделителем параметров ACTION.

В вашей ACTION_ [action] функции (в этом примере Controller_Contact ), вызатем позвонил бы

$page_levels = Request::instance()->param('page_levels');
$page_array  = explode("/",$page_levels);

Это должно получить вам

 $page_array = array ( [1] => 'contact',
                       [2] => 'subpage',
                       [3] => 'subsubpage')
...