Как связать несколько маршрутов с помощью Zend_Controlle

У меня вопрос, как связать несколько маршрутов с помощью Zend_Controller_Router_Route_Chain?

Например, я хочу объединить 3 маршрута в цепочку год / месяц / день, но голол такой:

when url is
example.com/2011
runs index controller, year action

example.com/2011/11
runs index controller, year-month action

example.com/2011/11/10
runs index controller, year-month-day action

Я пытаюсь использовать этот код:

$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$chain = new Zend_Controller_Router_Route_Chain();

$route1 = new Zend_Controller_Router_Route(
    ':year',
    array(
        'controller' => 'news',
        'action'     => 'year'
    )
);

$route2 = new Zend_Controller_Router_Route(
    ':month',
    array(
        'controller' => 'news',
        'action'     => 'year-month'
    )
);

$route3 = new Zend_Controller_Router_Route(
    ':day',
    array(
        'controller' => 'news',
        'action'     => 'year-month-day'
    )
);

$chain->chain($route1)
      ->chain($route2)
      ->chain($route3);

$router->addRoute('chain', $chain)
       ->addRoute('route3', $route3)
       ->addRoute('route2', $route2)
       ->addRoute('route1', $route1);

Когда я захожу на example.com/2012 и example.com/2012/11/11, все в порядке

но когда я захожу на example.com/2012/11/, приложение показывает мне действие год-месяц-день, а на странице есть

Notice: Undefined index: day in P:\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Router\Route.php on line 299

Возможно я что-то не так делаю. Помогите, пожалуйста, решить мою проблему. Спасибо.


person Stanislav Protasevich    schedule 03.11.2011    source источник


Ответы (1)


Что ж, уведомление «неопределенный индекс» появляется, потому что вы не указали маршрутизатору никаких значений по умолчанию для года, месяца и дня.

Одна из идей решения - использовать только один маршрут для соответствия каждому запросу, используя значения по умолчанию, например. 0. Затем в вашем контроллере, если "день" имеет значение по умолчанию (день == 0), вы показываете весь месяц и т. Д.

$route1 = new Zend_Controller_Router_Route(
    ':year/:month/:day',
    array(
        'controller' => 'news',
        'action'     => 'year',
        'year' => '0',
        'month' => '0',
        'day' => '0'
    )
);
person Christian O. Andersson    schedule 30.04.2012