【问题标题】:Symfony 1.4 url_for empty string behaviorSymfony 1.4 url​​_for 空字符串行为
【发布时间】:2014-06-24 20:27:21
【问题描述】:

我正在开发一个 Symfony 1.4 项目,当我这样做时:

url_for('');

我希望获得 index.php 控制器的 URL 或至少 http://domain/ 但我得到了这个:

/sfTCPDF

sfTCPDF 是我在这个项目中的一个插件,在我的config/ProjectConfiguration.class.php 中使用如下:

class ProjectConfiguration extends sfProjectConfiguration {
    public function setup() {
        $this->enablePlugins('sfTCPDFPlugin');
    }
}

当我禁用插件时,我得到了预期的结果:

$url = url_for('');
> /

或者当我这样使用它时(不管插件是否启用):

$url = url_for('/');
> /

我不明白插件为什么会导致(或者即使是插件故障)。

有什么建议吗?我可以搜索并替换整个项目为url_for('') 并将'/' 但我真的很想知道为什么会这样。

经过一番研究: 我发现当url_for函数被调用时,程序是下一个:

  • lib/vendor/symfony/lib/helper/UrlHelper.php url_for()
  • lib/vendor/symfony/lib/helper/UrlHelper.php url_for2()
  • lib/vendor/symfony/lib/helper/UrlHelper.php url_for1()
  • lib/vendor/symfony/lib/controller/sfWebController.class.php gen_url()
  • lib/vendor/symfony/lib/routing/sfRoute.class.php generate()

在最后一个中,它得到$this->pattern,这里的模式是sfTCPDF/:action

这意味着正在播放一些路由。继续我的研究,我发现该插件有一个 routing.yml 和:

sfTCPDF:
    url:   /sfTCPDF/:action
    param: { module: sfTCPDF, action: test }

如果我删除此路由,一切都会按预期工作。

现在的问题是:插件什么时候创建一个sfTCPDF模式的路由对象,为什么?

【问题讨论】:

    标签: php symfony-1.4 url-for


    【解决方案1】:

    我从不将 url_for 与空字符串一起使用。

    在我以前的路线文件中:

    homepage:
      url:   /
      param: { module: home, action: index }
    

    所以如果我想要这条路线,我使用:

    url_for('@homepage');
    

    【讨论】:

    • 这也是解决这个问题的好方法。但我的问题仍然是:插件为什么要这样做?
    • 不确定,但我猜不支持使用 ''。我检查了 symfony 源代码,有一个特殊的 '/' 但不是 '',所以我猜这个函数期望得到一些字符串。
    【解决方案2】:

    url_for 使用您提供的路由名称在缓存路由表中查找正确的路由。如果您提供一个空字符串,它将从表中获取0 索引(您可以在文件中找到:cache/app/env/config/config_routing.yml.php

    当 TCPDF 插件在其路由上时,它被添加为第一个,这就是您将其作为 url 获取的原因。

    解决方案 - 不要为 url_for 使用空字符串。如果要获取主页的 url,请始终使用 url_for('/')url_for('@homepage')

    【讨论】:

    • 你根据路由解释symfony的行为,解决了我的问题!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多