Динамическая настройка BaseUrl в конфигурации в Symfony2 - PullRequest
5 голосов
/ 17 июня 2011

Я знаю, что в конфигурации Symfony2 нет ссылки на базовый URL, поскольку нет запроса; приложение может быть запущено в cli или на веб-сервере, и поэтому мы не можем полагаться на запрос. Но, тем не менее, у меня есть конфигурация, которая запрашивает таблицы стилей или базовый URL javascript (например, JQueryHelperBundle, где вы можете установить свой локальный путь jquery - локальный URL). Дело в том, есть ли способ динамически установить базовый URL для конфигурации, не изменяя его так, чтобы:

  • Приложение может перемещаться из любого разрабатываемого каталога, будь то www / myproject или www / foo / myproject, без необходимости изменения настроек
  • Производство будет работать так же, за исключением того, что будет обнаружена перезапись базового URL с помощью Apache (распространен виртуальный хостинг, где baseurl сопоставляется с веб-каталогом как '/').

Есть ли способ получить информацию об этом базовом URL? Будет ли использование разницы между $_SERVER['DOCUMENT_ROOT'] минус корневой каталог ядра способом обнаружения такой базовой ссылки? Но как насчет виртуального хоста перебазирования URL в / в веб-каталоге? Жесткое кодирование базового URL полностью связывает проект с тем, где он находится в процессе разработки, а для перемещения проекта потребуется каждый раз менять базовый URL, что раздражает.

Итак, есть ли способ динамически определять базовый URL в конфигурации Symfony2, в зависимости от среды, вне зависимости от запроса?

1 Ответ

0 голосов
/ 17 июня 2011

Я должен был сделать это в службе, поэтому я ввел службу маршрутизатора в свою службу, а затем:

$baseUrl = $router->getContext()->getHost();

Но я считал это скорее хаком, чем настоящим приспособлением для фреймворка Symfony2. Например, в Controller вы можете легко сгенерировать абсолютный URL (пример из книги Symfony):

$router->generate('blog_show', array('slug' => 'my-blog-post'), true);

А в шаблоне веточки есть функция {{url}}

Надеюсь, это поможет

...