默认情况下,您在ZF中使用以下URL语法:/ module / controller / action。我想要的是建立一个菜单系统,我可以使用任何我想要的URL。
让我说我制作一个名为'新闻'的菜单项。当我打电话给http://www.site.com/news时,我希望下载:
必须在菜单项的数据库记录中配置这些配置值。
我怎样才能在zend中这样做?我花了很多时间寻找它,但我仍然无法弄清楚如何。有人吗?
答案 0 :(得分:1)
我建议使用前端控制器插件扫描数据库中的所有条目,根据这些条目创建路由规则并将其添加到路由器(see this)。
当然建议使用缓存策略,这样您就不会对每个请求进行大量处理。
答案 1 :(得分:0)
您可以创建一个插件,并在routeStartup中定义拦截您的请求并将/module/controller/action
路由到/action
的内容,但为此,您的所有操作名称必须是唯一的:
class My_CustomRouterPlugin extends Zend_Controller_Plugin_Abstract
{
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
$fc = Zend_Controller_Front::getInstance();
$action =$fc->getRequest()->getActionName();
$router = $fc->getRouter();
$model= new myModel();
$myPage = $model->getPageByAction($action);
$route = new Zend_Controller_Router_Route('/action', array(
'module' => $myPage->getModule();
'controller' => $myPage->getController();
'action' => $action;
));
$router->addRoute($action, $route);
return $router;
}
}
在myModel中定义一个方法可以获得一个包含模块,控制器名称(来自你的数据库)的对象(或数组)。
并在你的bootstrap中注册这个插件:
$front->registerPlugin(new My_CustomRouterPlugin());