0

私の質問は、Zend_Controller_Router_Route_Chain を使用して複数のルートを連鎖させる方法です。

たとえば、年/月/日の 3 つのルートをチェーンしたいのですが、ゴールは次のとおりです。

URLが
example.com/2011
インデックス コントローラ、年アクションを実行します

example.com/2011/11
インデックス コントローラ、年月アクションを実行します

example.com/2011/11/10
インデックス コントローラ、年月日アクションを実行します

私はこのコードを使用しようとしています:

$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: 未定義のインデックス: day in P:\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Router\Route.php 行 299

おそらく私は何か間違ったことをしています。私の問題を解決するのを手伝ってください。ありがとう。

4

1 に答える 1

0

年、月、日のデフォルト値をルーターに与えていないため、「未定義のインデックス」通知が表示されます。

解決策の 1 つのアイデアは、すべてのリクエストに一致するように 1 つのルートのみを使用し、デフォルト値 (0 など) を使用することです。次に、コントローラーで、「日」にデフォルト値 (day==0) がある場合、月全体を表示します。 .

$route1 = new Zend_Controller_Router_Route(
    ':year/:month/:day',
    array(
        'controller' => 'news',
        'action'     => 'year',
        'year' => '0',
        'month' => '0',
        'day' => '0'
    )
);
于 2012-04-30T22:30:14.280 に答える