Как лучше всего получить корневой каталог приложения изнутри контроллера? Можно ли вывести его вне контроллера?
Теперь я получаю это, передавая его (из параметров) службе в качестве аргумента, например:
services:
sr_processor:
class: Pro\Processor
arguments: [%kernel.root_dir%]
Есть ли лучший и более простой способ получить эту информацию в Symfony2?
php
symfony
symfony-2.8
symfony-config-component
Давид Охия
источник
источник
%kernel.project_dir%
чтобы получить root-доступ к вашему проекту.["%kernel.root_dir%"]
Ответы:
ОБНОВЛЕНИЕ 2018-10-21:
С этой недели
getRootDir()
не рекомендуется. Пожалуйста, используйтеgetProjectDir()
вместо этого, как это предлагается в разделе комментариев Музараф Али.-
Использовать это:
И если вам нужен веб- корень:
это будет работать из метода действия контроллера ...
РЕДАКТИРОВАТЬ: Что касается служб, я думаю, что то, как вы это сделали, максимально чисто, хотя я бы передал полную службу ядра в качестве аргумента ... но это также поможет ...
источник
$this->get('kernel')->getRootDir() . '/../..' . $this->getRequest()->getBasePath();
$this->container->getParameter('kernel.cache_dir')
в контроллерах вместо решения, которое вы предоставилиcontainer
внедрил :) Если вы будете следовать лучшим практикам,container
следует избегать инъекции любой ценой. Что касается решения получитьweb
каталог, я все еще использую тот, который я предоставил выше;)%kernel.project_dir%/web/
%kernel.root_dir%/../web/
В Symfony 3.3 вы можете использовать
чтобы получить корень сети / проекта.
источник
Если вы используете этот путь для доступа к частям проектов, которые не являются кодом (например, каталог загрузки или база данных SQLite), то, возможно, лучше превратить путь в параметр, например:
Этот параметр можно вводить везде, где он вам нужен, поэтому вам больше не придется возиться с путями в коде. Кроме того, параметр можно изменить во время развертывания. Наконец, каждый поддерживающий программист будет лучше понимать, для чего вы его используете.
Обновление: исправлено использование константы kernel.root_dir.
источник
Вы также можете использовать регулярное выражение в дополнение к этому:
источник
Начиная с Symfony 3.3 вы можете использовать привязку, например
После этого вы можете использовать параметр $ kernelProjectDir в любом контроллере ИЛИ службе. Как
источник