Symfony 2.7 получает корневой каталог ВЕЗДЕ

Я просто хочу спросить, есть ли способ получить корневой каталог приложения Symfony ЛЮБОЙ ГДЕ?

Под словом «где угодно» я подразумеваю, в любом файле моего приложения.

Я искал везде, и все, что я получил, это:

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

Что, конечно, работает! Но я не могу использовать его в своих пользовательских классах. Мне нужно получить корневой каталог в одном из моих пользовательских классов.

Я уже читал ответы о DependencyInjection / Service и других вещах, но я думаю, что это слишком сложно / излишне реализовывать их только для решения моей текущей проблемы.

Мне просто нужен корневой каталог моего приложения, точка. Есть ли другой способ?

Можете ли вы передать корневой каталог в качестве параметра конструктора и сообщить об этом контейнеру внедрения зависимостей (DIC)? (Я имею в виду, вы получаете свой собственный класс из DIC? Или, может быть, вы создаете класс самостоятельно (вызываете new MyClass() где-то)?

mTorres 21.05.2018 08:11

я просто вызываю статическую функцию из своего класса.

Wreigh 21.05.2018 08:27

Вам нужен доступ к таким подробным инфраструктурным объектам на низком уровне в ваших организациях? Ты делаешь это неправильно.

emix 23.05.2018 10:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
3
210
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я просмотрел свой ответ. Действительно, это вам не подойдет. В любом случае, если вы не хотите использовать внедрение зависимостей для достижения этой цели, потому что у вас есть статические методы, где вы вызываете эти статические методы? В контроллере? В команде? В другом сервисе? Если вы не хотите создавать экземпляр своего класса, потому что вам не нужны объекты с собственными данными, у вас есть 2 варианта:

  1. Получите корневой каталог вне вашего класса и используйте его в качестве параметра для ваших статических методов.
  2. Если ваш класс использует статические методы, что означает, что ваш класс ведет себя как вспомогательный класс, это всего лишь инструмент (преобразователь, экспортер, средство визуализации и т. д.). Итак, я предполагаю, что вы поместили все свои вспомогательные классы в один каталог. В этом случае вы можете создать класс перечисления, который определяет константу, например корневой каталог, веб-каталог, задающую абсолютные пути.

Я вызываю статические методы в любом месте, где хочу, потому что функция получает файл конфигурации, поэтому мне нужен абсолютный путь к корневому каталогу, поэтому я могу просто конкатенировать /config/config_something.yml, спасибо! похоже, @Francesco дал конкретный ответ. Тем не менее, спасибо за ваши идеи.

Wreigh 24.05.2018 01:05
Ответ принят как подходящий

Самый простой способ, который я могу придумать, - это определить константу в вашем файле app.php, например:

define("ROOTDIR", $kernel->getRootDir());

так что вы можете затем использовать эту константу где угодно. По сравнению с этим статический метод тоже излишни.

это здорово! хотя я не могу придумать никаких минусов для этого решения. Благодарность! должен был подумать об этом раньше

Wreigh 24.05.2018 01:04

Другие вопросы по теме