Как получить корневой каталог приложения Symfony2?

Каков наилучший способ получить корневой каталог приложений изнутри контроллера? Можно ли вывести его за пределы контроллера?

Теперь я получаю это, передавая его (из параметров) службе в качестве аргумента, например так:

services:

    sr_processor:
        class: Pro\Processor
        arguments: [%kernel.root_dir%]

Есть ли лучший, более простой способ получить эту информацию в Symfony2?

 john Smith09 мая 2014 г., 20:51
Вы смешиваете сервис и контроллер лет
 ochitos13 сент. 2017 г., 09:55
не забудьте заключить литералы в кавычки:["%kernel.root_dir%"]
 Muzafar Ali21 авг. 2017 г., 04:56
Снова для Symfony 3.3 и далее используйте%kernel.project_dir% чтобы получить корень вашего проекта.
 Inoryy10 февр. 2012 г., 09:34
ваше решение лучше

Ответы на вопрос(4)

В Symfony 3.3 вы можете использовать

получить рут web / проекта.

 D.Dimitrioglo28 окт. 2017 г., 20:18
Спасибо! Я люблю людей, которые читают заметки о выпуске)))

    $directoryPath = $this->container->getParameter('kernel.root_dir') . '/../web/bundles/yourbundle/';
    $directoryPath = preg_replace("/app..../i", "", $directoryPath);
    echo $directoryPath;

которые не являются кодом (например, каталог загрузки или база данных SQLite), то может быть лучше превратить путь в параметр, например так:

parameters:
    database_path: '%kernel.root_dir%/../var/sqlite3.db'

Этот параметр может быть введен везде, где он вам нужен, так что вам больше не придется возиться с путями в вашем коде. Кроме того, параметр может быть переопределен во время развертывания. В конце концов, каждый программист будет лучше понимать, для чего вы его используете.

Обновление: исправлено постоянное использование kernel.root_dir.

ОБНОВЛЕНИЕ 2018-10-21:

На этой неделеgetRootDir() был объявлен устаревшим Пожалуйста, используйтеgetProjectDir() вместо этого, как предложено в разделе комментариев Музарафом Али.

-

Использовать это:

$this->get('kernel')->getRootDir();

И если вы хотитеWeb корень:

$this->get('kernel')->getRootDir() . '/../web' . $this->getRequest()->getBasePath();

это будет работать из метода действия контроллера ...

РЕДАКТИРОВАТЬ: Что касается услуг, я думаю, что вы сделали это как можно более чистым, хотя я бы передавал полный сервис ядра в качестве аргумента ... но это также сделает свое дело ...

 Muzafar Ali21 авг. 2017 г., 04:53
Начиная с версии Symfony 3.3 и выше%kernel.project_dir%/web/ вместо%kernel.root_dir%/../web/
 Sebastian26 авг. 2013 г., 08:12
+1, но не точно для symfony2. Используйте вместо:$this->get('kernel')->getRootDir() . '/../..' . $this->getRequest()->getBasePath();
 Anyone03 февр. 2015 г., 09:02
Ваше приложение не должно знать о вашем ядре на самом деле ...
 Massimiliano Arione10 сент. 2013 г., 11:06
Это решение подходит только для контроллеров. Здесь вопрос об услугах. Во всяком случае, почему прохождениевсе контейнер просто чтобы получить переменную? Гораздо лучше передать только% kernel.root_dir%
 lackovic1011 сент. 2014 г., 22:17
Массимилиано прав, и в качестве дополнения я использую$this->container->getParameter('kernel.cache_dir') в контроллерах вместо решения, которое вы предоставили

Ваш ответ на вопрос