Как связать несколько маршрутов с Zend_Controlle - PullRequest
0 голосов
/ 03 ноября 2011

Мой вопрос заключается в том, как связать несколько маршрутов с помощью 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

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

$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, все в порядке

, но когда я посещаю пример.com / 2012/11 / application показывает мне действие год-месяц-день, а на странице есть

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

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

1 Ответ

0 голосов
/ 01 мая 2012

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

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

$route1 = new Zend_Controller_Router_Route(
    ':year/:month/:day',
    array(
        'controller' => 'news',
        'action'     => 'year',
        'year' => '0',
        'month' => '0',
        'day' => '0'
    )
);
...