Reputation: 2973
I'm developing a site which has urls like this:
site.com/james
site.com/james/photos
Schema for this urls are this: site.com/USERNAME/APPLICATION
Both username and application names are checking from db yb program logic. I set the route for this but Zend is routing all requests to this route.
But there is same controllers and admin module. When i go to site.com/admin, it looks for username "admin". Or when i go to site.com/james/profile, it tries to find the application named "profile". But there is a action in UserController for this.
How can i implement this feature? For example a front controller which looks for names of Controllers and dispatch the requst to them if controller exists?
Upvotes: 3
Views: 487
Reputation: 50658
I'd use route chaining. Remove default routes, and add it at the end of the chain.
Eventually a front controller plugin to handle the conditions.
Upvotes: 0
Reputation: 2131
Have a look at overriding the Zend_Controller_Action __call($method, $args)
method which is invoked if the desired action cannot be found.
You could put your site.com/USERNAME/APPLICATION checking logic in the __call method of, say, the default controller (or wherever makes most sense) and go back to using the default route.
Upvotes: 2
Reputation: 58371
Generally, if you do this, you'll have to reinstate the 'default' routes afterwards for them to work. This literally means adding a route that matches /admin and goes to the admin module.
This soon becomes a pain to maintain if your app is quite big. You can make things easier by changing your url schemes to something like site.com/user/james and site.com/user/james/photos.
One alternative which I use for content driven websites is to route all requests that don't match an existing controller to the default controller/action:
$front->setParam('useDefaultControllerAlways', true);
By default, unrouteable requests will map to IndexController::indexAction
Upvotes: 2