Symfony2根据查询结果动态选择控制器

时间:2014-05-26 10:31:33

标签: symfony routing

我试图创建一个可扩展的cms。我的数据库中有URL,如" / menu-item / content"对于每个URL,都有一个以格式" AcmeDemoBundle:Default:index"指定的动作。 我想解决此操作并根据匹配的URL调用相应的控制器。

我的主要目标是直接调用存储在数据库中的控制器。在我使用一种方法之前,当我在路由的末尾放置一个匹配所有url的路由时,将控制器与从db中找到目标控制器的控制器相关联,而不是使用Controller :: forward()来获得预期的结果。这种方法的主要问题是我需要为每个页面加载创建一个不必要的子请求。另一个问题是将post变量传递给这个新的子请求。

到目前为止,我已尝试侦听kernel.request事件并修改$ request->属性以包含匹配的_controller值,但似乎它没有效果。

对此主题的任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

我认为你混淆了转发和重定向电话。 Redirect执行301或302重定向(永久和临时的重定向),这会在您调用它时创建子请求。 Forward对新操作执行内部调用(相同请求)。至于你的第二个问题,因为forward是同一个请求中的内部调用,所以全局内容保持不变(包括POST变量)。在我看来,使用forward可能是一个很好的解决方案(如果你没有任何其他低级别的要求,或者你想比通常的MVC操作更灵活)。

希望这有帮助。