Zend framework: Varsayılan yolları Çıkarma

2 Cevap php

Ben Zend FW 1.9.2 kullanıyorum, varsayılan yolları devre dışı bırakmak ve kendi arz etmek istiyorum. Kontrolörü /: aksiyon yönlendirme I really default / sevmediğim.

Fikir init de yolları enjekte etmek, ve istek o hata denetleyicisi iletilmesi gereken enjekte yollarından biri yönlendirilebilir edemiyor. (Defaultly KAYITLI Zend_Controller_Plugin_ErrorHandler kullanarak)

This all works fine, until I disable the default routes with $router->removeDefaultRoutes(); When I do that, the error controller no longer routes unrouted requests to the error controller. In stead, it routes all unrouted requests to indexAction on the default controller.

Kontrolörü /: eylem yönlendirmeyi ama rota hata işleme TUTUN herkes nasıl varsayılan / devre dışı bırakmak için herhangi bir fikrin var mı?

Temelde, bu ben ne olduğunu:

$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);

2 Cevap

Eğer varsayılan yolları kaldırmak sorun Zend artık adresler / anlar olduğunu: modül /: kontrolörü /: Bir rota gönderilen her eylem, bu nedenle, bu varsayılan Modülü, indeks Kontrolör, indeks Eylem yönlendirilir alır.

Hata eklentisi kontrolör sevk postDispath yöntemi çalışır ve denetleyici veya modül, veya eylem bulunmadığı takdirde, standart yönlendirici bir hata atıyor çünkü çalışır.

Eğer preDispatch üzerinde çalıştığı yeni bir eklenti yazmak gerekir bu config özel yolları etkinleştirmek ve yol kontrol ve o zaman geçersiz URL bulunuyor durumunda hata eklentisi yönlendirmek.

Eğer varsayılan yolları kaldırdığınızda, hata işleyicisi eklenti kullanan varsayılan yol kaldırın. Bu demektir ki yönlendirmek çalıştığında

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

senin yolların hiçbiri bu kuruluma uygun. Böylece başarısız olacak. Ben bunu gibi varsayılan sadece bu yol eklemek varsayalım:

$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);