【发布时间】:2013-01-30 14:06:22
【问题描述】:
我的基本模板中有一个嵌入式控制器。这是一个搜索栏。 对于搜索栏控制器,我有一个路线“myProject/search”。
我想要的是只有当我嵌入控制器的模板(base.html.twig)调用它时才会采用这条路线,而不是当我手动放入浏览器时:“myproject/search” .
关于如何做到这一点的任何想法。
【问题讨论】:
-
为什么是 -1 ?请解释一下。
我的基本模板中有一个嵌入式控制器。这是一个搜索栏。 对于搜索栏控制器,我有一个路线“myProject/search”。
我想要的是只有当我嵌入控制器的模板(base.html.twig)调用它时才会采用这条路线,而不是当我手动放入浏览器时:“myproject/search” .
关于如何做到这一点的任何想法。
【问题讨论】:
我想,因为有些时候你做不到:
http://symfony.com/doc/current/book/templating.html#embedding-controllers
引用自文档:
即使此控制器仅在内部使用,您也需要 创建指向控制器的路由
(...)
从 Symfony 2.0.20/2.1.5 开始,Twig 渲染标签现在采用绝对 url 而不是控制器逻辑路径。这修复了一个重要的 官方博客上报告了安全问题 (CVE-2012-6431)。如果你的 应用程序使用旧版本的 Symfony 或仍然使用 以前的渲染标签语法,你应该尽快升级。
无论如何,我想,当您从模板调用搜索操作时,您可以通过将一些“秘密”参数传递给搜索操作来尝试自己做。接下来在动作中检查参数是否传递给它,如果没有,则抛出 404。
实现目标的另一种方法是使用 .htaccess 文件。
【讨论】:
您可以通过routing 配置中的_method 选项将路由限制为特定方法:
your_rote:
pattern: /myProject/search
defaults: { _controller: YourBundle:YourController:YourAction }
requirements:
_method: POST
【讨论】: