我正在开发一个网址,其中包含以下网址:
site.com/james
site.com/james/photos
此网址的架构如下:site.com/USERNAME/APPLICATION
用户名和应用程序名都是从db yb程序逻辑中检查的。我为此设置了路由,但Zend将所有请求路由到此路由。
但是有相同的控制器和管理模块。当我访问site.com/admin时,它会查找用户名“admin”。或者当我访问site.com/james/profile时,它会尝试查找名为“profile”的应用程序。但是UserController中有一个动作。
我该如何实现此功能?例如,如果控制器存在,前端控制器会查找控制器的名称并向它们发送请求?
答案 0 :(得分:2)
通常,如果您这样做,则必须在之后恢复“默认”路线才能使其正常工作。这实际上意味着添加匹配/ admin的路由并转到管理模块。
如果您的应用程序非常庞大,这很快就会变得很难。您可以通过将网址方案更改为site.com/user/james和site.com/user/james/photos来简化操作。
我用于内容驱动网站的一种替代方法是将与现有控制器不匹配的所有请求路由到默认控制器/操作:
$front->setParam('useDefaultControllerAlways', true);
默认情况下,不可路由的请求将映射到IndexController :: indexAction
答案 1 :(得分:2)
如果无法找到所需的操作,请查看覆盖Zend_Controller_Action __call($method, $args)
方法。
您可以将site.com/USERNAME/APPLICATION检查逻辑放在默认控制器的__call方法中(或者最有意义的地方)并返回使用默认路由。
答案 2 :(得分:0)
我会使用route chaining。删除默认路由,并将其添加到链的末尾。
最终用于处理条件的前端控制器插件。