Intro:
Ik heb een ZF 1.10.7 applicatie met 2 modules: /default en /advanced.
Er is echter een wezenlijk verschil tussen deze 2 modules.
/advanced werkt volgens het standaard principe:
example.com/advanced/{controller}/{action}/{param}/{value}
Doel:
Alle gevallen buiten /advanced moeten routen over /default/index/index.
Dus example.com/foo/bar?!@#$%^& moet eigenlijk doen: example.com/default/index/index
Nee, ik verwacht niet dergelijke rare urls, maar het gaat om random urls die persé over /index/index moeten.
Probleem:
Nu weet ik hoe ik het ZF dat moet laten doen. Maar ik weet niet waar/wanneer.
Probleem van plaatsing: Eerst moet bekend zijn dat we niet in /advanced zitten, op het moment dat dat bekend is moet de FrontController de hele mikmak over /default/index/index runnen.
Ik heb inmiddels al veel forums/documentatie gelezen over het goed routen naar modules en daar is dit uitgekomen:
De vraag is, waarom werkt dit niet, en hoe moet ik het werkend maken? Nu struikelt het ZF telkens over onbekende urls zoals example.com/foobar. Als ik useDefaultControllerAlways in index.php zet werkt het wel. Dan routeert het ZF wél alle requests via /default/index/index. Het probleem is dat ik dan nooit in /advanced module kan komen.
update:
Het probleem is opgelost verdampt.
Hoe het nu bij mij werkt; zie verderop in dit topic: Barleone in "[ZF] useDefaultControllerAlways behalve ..."
Ik heb een ZF 1.10.7 applicatie met 2 modules: /default en /advanced.
Er is echter een wezenlijk verschil tussen deze 2 modules.
/advanced werkt volgens het standaard principe:
example.com/advanced/{controller}/{action}/{param}/{value}
Doel:
Alle gevallen buiten /advanced moeten routen over /default/index/index.
Dus example.com/foo/bar?!@#$%^& moet eigenlijk doen: example.com/default/index/index
Nee, ik verwacht niet dergelijke rare urls, maar het gaat om random urls die persé over /index/index moeten.
Probleem:
Nu weet ik hoe ik het ZF dat moet laten doen. Maar ik weet niet waar/wanneer.
PHP:
1
| Zend_Controller_Front::getInstance()->setParam('useDefaultControllerAlways', true); |
Probleem van plaatsing: Eerst moet bekend zijn dat we niet in /advanced zitten, op het moment dat dat bekend is moet de FrontController de hele mikmak over /default/index/index runnen.
Ik heb inmiddels al veel forums/documentatie gelezen over het goed routen naar modules en daar is dit uitgekomen:
PHP: /index.php
1
2
3
| $front= Zend_Controller_Front::getInstance(); require_once 'Barleone/Plugin/ModuleRouter.php'; $front->registerPlugin(new Barleone_Plugin_ModuleRouter()); |
PHP: /library/Barleone/PluginModuleRouterController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| <?php /** * ModuleRouter plugin * Zorgt dat de FrontController niet in de knoop raakt. * Module ADVANCED is toegestaan, maar alle andere requests gaan naar de DEFAULT module. */ class Barleone_Plugin_ModuleRouter extends Zend_Controller_Plugin_Abstract { /** * Constructor * * @return void */ public function __contstruct() {} /** * Called before Zend_Controller_Front begins evaluating the * request against its routes. * * @param Zend_Controller_Request_Abstract $request * @return void */ public function routeStartup($request) { // De requesturi is al bekend, de modulename nog niet. // Dit is het vroegste moment in deze plugin waarop ingegrepen kan worden in de FrontController. $requesturi = $request->getRequestUri(); if(!preg_match('/^\/advanced/i', $requesturi)) { Zend_Controller_Front::getInstance()->setParam('useDefaultControllerAlways', true); } } /** * Called after Zend_Controller_Router exits. * Called after Zend_Controller_Front exits from the router. * * @param Zend_Controller_Request_Abstract $request * @return void */ public function routeShutdown($request) { $modulename = $request->getModuleName(); if($modulename != 'advanced') { Zend_Controller_Front::getInstance()->setParam('useDefaultControllerAlways', true); } } public function dispatchLoopStartup($request){} public function preDispatch($request){} public function postDispatch($request){} public function dispatchLoopShutdown(){} } |
De vraag is, waarom werkt dit niet, en hoe moet ik het werkend maken? Nu struikelt het ZF telkens over onbekende urls zoals example.com/foobar. Als ik useDefaultControllerAlways in index.php zet werkt het wel. Dan routeert het ZF wél alle requests via /default/index/index. Het probleem is dat ik dan nooit in /advanced module kan komen.
update:
Het probleem is opgelost verdampt.
Hoe het nu bij mij werkt; zie verderop in dit topic: Barleone in "[ZF] useDefaultControllerAlways behalve ..."
[ Voor 20% gewijzigd door Barleone op 27-07-2011 02:02 ]
Tweakers.net 6 nostalgie! - Wayback Machine
Have you tried turning it off and on again?