Как получить корневой каталог приложения Symfony2? - PullRequest
119 голосов
/ 09 февраля 2012

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

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

services:

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

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

Ответы [ 4 ]

215 голосов
/ 09 февраля 2012

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

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

—-

Используйте это:

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

И если вы хотите web root:

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

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

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

14 голосов
/ 21 сентября 2017

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

$projectRoot = $this->get('kernel')->getProjectDir();

для получения корня сети / проекта.

8 голосов
/ 25 августа 2016

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

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

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

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

6 голосов
/ 20 января 2015

Вы также можете использовать регулярное выражение в дополнение к этому:

    $directoryPath = $this->container->getParameter('kernel.root_dir') . '/../web/bundles/yourbundle/';
    $directoryPath = preg_replace("/app..../i", "", $directoryPath);
    echo $directoryPath;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...