0

我正在开发一个 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为什么?

4

2 回答 2

2

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

在我的路线文件中,我曾经拥有:

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

因此,如果我想要这条路线,我使用:

url_for('@homepage');
于 2014-06-24T22:00:30.923 回答
1

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

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

解决方案 - 不要为url_for. 如果您想获取主页的 url,请始终使用url_for('/')url_for('@homepage')

于 2014-06-29T11:39:36.827 回答