Potrzebuję niestandardowej trasy dla mojej witryny:
Wszystko takie jak: www.site.com/457485789479 powinno być kierowane do index/index z param ID/45.. wszystko inne powinno działać z domyślnymi ustawieniami zend framework.
Mam taką trasę:
resources.router.routes.test.type = "Zend_Controller_Router_Route"
resources.router.routes.test.route = ":id"
resources.router.routes.test.defaults.module = "default"
resources.router.routes.test.defaults.controller = "index"
resources.router.routes.test.defaults.action = "index"
resources.router.routes.test.defaults.id = ""
Ale teraz "URL ViewHelper" nie działa i wszystko idzie do "/" czy ktoś widzi błąd i może pomóc`?
2 odpowiedzi
Korzystanie z niestandardowej trasy, takiej jak example.com/:id
, zastąpi trasę domyślną. Ma to niezamierzone konsekwencje, ponieważ nie będą już działać example.com/:module
ani example.com/:controller
. Oto, co zrobiłem, aby osiągnąć to, o co prosisz.
Potrzebowałem tego adresu URL dla stron statycznych:
example.com/about
Zachowując domyślną trasę, więc to nadal działa
example.com/:module
example.com/:controller
Sposób, w jaki to zrobiłem, polegał na użyciu wtyczki do sprawdzenia, czy moje żądanie może zostać wysłane. Gdyby żądanie nie mogło zostać wysłane przy użyciu domyślnej trasy, zmieniłbym żądanie na odpowiedni moduł, aby załadować moją stronę. Oto wtyczka, którą możesz zmodyfikować do swoich potrzeb:
class My_Controller_Plugin_StaticPageRoute extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
// Can this request be dispatched
if (!$dispatcher->isDispatchable($request)) {
// return if not a single level request
if ('default' != $request->getModuleName()
&& 'index' != $request->getActionName()) {
return;
}
// Get param to be used in new request ie. example.com/:param
$param = $request->getControllerName();
// Set the request where to try next
$request->setModuleName('default');
$request->setControllerName('index');
$request->setActionName('index');
$request->setParam('id', $param);
/** Prevents infinite loop if you made a mistake above **/
if ($dispatcher->isDispatchable($request)) {
$request->setDispatched(false);
}
}
}
}
Powinieneś użyć Zend_Controller_Router_Route_Regex zamiast Router_Route
$router->addRoute('router-name', new Zend_Controller_Router_Route_Regex(
'(\d{2,})',
array(
'controller' => 'index',
'action' => 'index'
),
array(1 => 'id'),
'%d'
));
Podobne pytania
Nowe pytania
zend-framework
Zend Framework to zorientowana obiektowo struktura aplikacji internetowych typu open source zaimplementowana w PHP 7.1 i licencjonowana na nowej licencji BSD. Zend Framework został zarchiwizowany 1 stycznia 2020 r. Równocześnie z migracją i uruchomieniem Laminas Project, oficjalnej kontynuacji pod nadzorem The Linux Foundation.