【问题标题】:Symfony2 routing: How to request that the route will be taken from only one templateSymfony2 路由:如何请求仅从一个模板中获取路由
【发布时间】:2013-01-30 14:06:22
【问题描述】:

我的基本模板中有一个嵌入式控制器。这是一个搜索栏。 对于搜索栏控制器,我有一个路线“myProject/search”。

我想要的是只有当我嵌入控制器的模板(base.html.twig)调用它时才会采用这条路线,而不是当我手动放入浏览器时:“myproject/search” .

关于如何做到这一点的任何想法。

【问题讨论】:

  • 为什么是 -1 ?请解释一下。

标签: php symfony twig routes


【解决方案1】:

我想,因为有些时候你做不到:

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 文件。

【讨论】:

  • 谢谢,“秘密”论证的想法似乎很好,但这不是正确的做法。其中涉及htaccess文件,我将不得不检查更多细节,如果您对如何操作有任何建议,它将是完美的。
  • “htaccess”的想法是关于禁止从这个文件级别访问指定的路由(你应该能够很容易地找到关于它的适当信息)。而且这个解决方案似乎也不完美,但我没有找到更好的解决方案。但也许如果你只是想对用户隐藏这个并且你不在乎是否有人偶然直接来到这条路线,如果你让这条路线像“yourproject/mysearch12381923172384”一样“不可猜测”也许就足够了?
【解决方案2】:

您可以通过routing 配置中的_method 选项将路由限制为特定方法:

your_rote:
    pattern: /myProject/search
    defaults: { _controller: YourBundle:YourController:YourAction }
    requirements:
        _method: POST

【讨论】:

  • 谢谢,但是我的路由可以用于 GET 和 POST。我知道如何对此进行限制,但我想将路由限制为只能从嵌入我的控制器的树枝模板访问。
  • @Milos ,如果用户输入搜索 url 会有什么不同。他们只会看到搜索页面。有什么问题
  • @thecatontheflat,实际上,当用户输入搜索 url 时,他只会得到搜索栏,而不是搜索页面,这就是问题所在。搜索栏有他的溃败:MyProject/search 和搜索页面:MyProject/search/{q}/{type}/...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2015-05-08
  • 2015-09-22
相关资源
最近更新 更多