Symfony 1.4 url_for поведение пустой строки

Я работаю над проектом Symfony 1.4, и когда я это делаю:

url_for('');

Я ожидаю получить URL-адрес контроллера index.php или хотя бы 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 и почему?


person Lordn__n    schedule 24.06.2014    source источник


Ответы (2)


url_for использует указанное вами имя маршрута, чтобы найти правильный маршрут в кэшированной таблице маршрутов. Если вы укажете пустую строку, она возьмет индекс 0 из таблицы (который вы можете найти в файле: cache/app/env/config/config_routing.yml.php.

Когда плагин TCPDF находится на своем маршруте, он добавляется первым, поэтому вы получаете его как URL-адрес.

Решение - не используйте пустую строку для url_for. Если вы хотите получить URL-адрес домашней страницы, всегда используйте url_for('/') или url_for('@homepage').

person Michal Trojanowski    schedule 29.06.2014
comment
Вы объясняете поведение Symfony в соответствии с маршрутизацией, что решает мой вопрос! Спасибо! - person Lordn__n; 01.07.2014

Я никогда не использую url_for с пустой строкой.

В моем файле маршрутов я использую:

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

Поэтому, если мне нужен маршрут для этого, я использую:

url_for('@homepage');
person ventayol    schedule 24.06.2014
comment
Это также хороший способ решить эту проблему. Но мой вопрос все же: почему плагин это делает? - person Lordn__n; 25.06.2014
comment
Не уверен, но предполагаю, что использование '' не поддерживается. Я проверил исходный код symfony, и там есть особый случай '/', но не для '', поэтому я думаю, что функция ожидает получить какую-то строку. - person ventayol; 25.06.2014