Php 如何在Zend Framework中动态更改控制器?

Php 如何在Zend Framework中动态更改控制器?,php,zend-framework,controller,Php,Zend Framework,Controller,我正在进行CMS,其中URL是基于页面标题的SEO友好名称。需要一个区段使用特定的控制器。例如: test.com/page1(使用索引控制器) test.com/page2(使用索引控制器) test.com/page3(使用不同的控制器) test.com/page4(使用索引控制器) 我可以添加一个路由,上面写着“page3”将使用“不同的”控制器,但是CMS的用户需要能够更改URL的名称和seo,因此在当前为“page3”的位置,可以稍后更改,这将打破我的路由规则 在Zend设置要使用的

我正在进行CMS,其中URL是基于页面标题的SEO友好名称。需要一个区段使用特定的控制器。例如:

test.com/page1(使用索引控制器) test.com/page2(使用索引控制器) test.com/page3(使用不同的控制器) test.com/page4(使用索引控制器)

我可以添加一个路由,上面写着“page3”将使用“不同的”控制器,但是CMS的用户需要能够更改URL的名称和seo,因此在当前为“page3”的位置,可以稍后更改,这将打破我的路由规则

在Zend设置要使用的控制器之前,获取请求并从DB中提取要使用的控制器(sql类似于“从seo='page3'”的菜单中选择控制器),然后将其设置为控制器的最佳方式是什么(前端控制器插件或其他方式)


非常感谢您提供的任何帮助或见解。

您必须创建一个控制器插件,并在请求对象上设置模块/控制器/操作

然后在predispatch()中,可以执行以下操作:

public function preDispatch(Zend_Controller_Request_Abstract $request)
{
    $request->setModuleName($this->_getModule());
    $request->setControllerName($this->_getController());
    $request->setActionName($this->_getAction());
}

然后您可以创建方法u getModule()、_getController()、_getAction(),这些方法将检查$\u服务器['REQUEST\u URI']和您的数据库,并设置适当的模块/控制器/操作。

感谢您的回复。您提到的功能都应该是frontController插件的一部分吗?假设我制作了一个名为updateControllerSeo的插件,函数preDispatch和_getController将是该类插件的一部分?再次感谢,是的。它们应该在插件中。但是我建议将它们放在routeShutdown()中,因为在本例中,它们将在每个操作之前被调用(如果您使用action view hleper,或者其他…),在插件中创建所有这些方法。如果它们不在插件类中,则不能使用($this)调用它们。需要preDispatch()或routeShutdown(),因为它们是在调度周期中调用的“挂钩”