4

Zend FW 1.9.2 を使用しています。デフォルト ルートを無効にして、独自のルートを提供したいと考えています。デフォルトの /:controller/:action ルーティングは本当に嫌いです。

アイデアは、init でルートを挿入することです。要求が挿入されたルートの 1 つにルーティングできない場合は、エラー コントローラーに転送する必要があります。(デフォルトで登録されている Zend_Controller_Plugin_ErrorHandler を使用)

$router->removeDefaultRoutes(); でデフォルト ルートを無効にするまで、これはすべて正常に機能します。これを行うと、エラー コントローラーはルーティングされていない要求をエラー コントローラーにルーティングしなくなります。代わりに、ルーティングされていないすべてのリクエストをデフォルト コントローラの indexAction にルーティングします。

デフォルトの /:controller/:action ルーティングを無効にして、ルートエラー処理を保持する方法を知っている人はいますか?

基本的に、これは私がしていることです:

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->removeDefaultRoutes(); // <-- when commented, errorhandling works as expected

$route = new Zend_Controller_Router_Route_Static(
    '',
    array('controller' => 'content', 'action' => 'home')
);
$router->addRoute('home', $route);
4

3 に答える 3

0

デフォルト ルートを削除すると、エラー ハンドラ プラグインが使用するデフォルト ルートが削除されます。これは、ルーティングしようとすると、

array('module' => 'default, 'controller' => 'error', 'action' => 'index')

この設定に一致するルートはありません。したがって、失敗します。次のように、デフォルトからこのルートだけを追加できると思います。

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->removeDefaultRoutes(); // <-- when commented, errorhandling works as expected
// Re-add the error route 
$router->addRoute(
   'error', 
    new Zend_Controller_Router_Route (
       'error/:action',
       array (
          'controller' => 'error',
          'action' => 'error'
       )
    )
);

$route = new Zend_Controller_Router_Route_Static(
    '',
    array('controller' => 'content', 'action' => 'home')
);
$router->addRoute('home', $route);
于 2009-09-14T13:13:07.927 に答える