我想要一些对我来说听起来相当简单但似乎不是的东西。
我的问题是我的应用程序需要 2 条路线:
每当模块是管理员时,应用以下路由:
$router->addRoute(
'backend',
new Zend_Controller_Router_Route('/:module/:controller/:action/:id/:value', array('module' => 'admin', 'controller' => 'dashboard', 'action' => 'index', 'id' => ':id', 'value' => ':value'))
);
效果很好。一个示例 url 可以是:http://localhost/server/domains/demo/admin/images/album/3
其中 admin 是模块,图像是控制器等等。
我想要的是,当用户访问时,http://localhost/server/domains/demo
他会被重定向到default module
,index controller
和index action
. 之后的所有demo/
内容都应被视为单个参数(/
可能未知)。
我尝试了几件事,从使用Route_Regex
,尝试(.*)
或(\d+)
,我在网上找到的东西。尝试切换值,使它们成为静态,打开/关闭removeDefaultRouter
,但没有任何效果。下面你可以看到我当前的引导程序。有任何想法吗?
$router = $this->frontController->getRouter();
$router->removeDefaultRoutes();
$router->addRoute(
'backend',
new Zend_Controller_Router_Route('/admin/:controller/:action/:id/:value', array('module' => 'admin', 'controller' => 'dashboard', 'action' => 'index', 'id' => ':id', 'value' => ':value'))
);
$router->addRoute(
'frontend',
new Zend_Controller_Router_Route('/default/:controller/:action/(.*)', array('module' => 'default', 'controller' => 'index', 'action' => 'index'))
);
后端工作正常,但是当http://localhost/server/domains/demo/
我收到以下错误时:No route matched the request
当给出答案时,请解释原因,因为 Zend_Route 对我来说总是有点模糊。提前致谢!
临时修复
在我使用的临时修复程序下方。它完全按照我的意愿工作,但我仍然相信 Zend_Route 可以实现同样的效果,而无需检查模块是否为管理员。
$router = $this->frontController->getRouter();
$uri = explode('demo/', $_SERVER['REQUEST_URI']);
$uri = (isset($uri[1])) ? explode('/', $uri[1]) : $uri[0];
if($uri[0] == 'admin')
{
$route = new Zend_Controller_Router_Route('/:module/:controller/:action/:id/:value', array('module' => 'admin', 'controller' => 'dashboard', 'action' => 'index', 'id' => null, 'value' => null));
$router->addRoute('router', $route);
}
else
{
$route = new Zend_Controller_Router_Route('/*', array('module' => 'default', 'controller' => 'index', 'action' => 'index'));
$router->addRoute('router', $route);
}