Я просто хочу спросить, есть ли способ получить корневой каталог приложения Symfony ЛЮБОЙ ГДЕ?
Под словом «где угодно» я подразумеваю, в любом файле моего приложения.
Я искал везде, и все, что я получил, это:
$this->get('kernel')->getRootDir();
Что, конечно, работает! Но я не могу использовать его в своих пользовательских классах. Мне нужно получить корневой каталог в одном из моих пользовательских классов.
Я уже читал ответы о DependencyInjection / Service и других вещах, но я думаю, что это слишком сложно / излишне реализовывать их только для решения моей текущей проблемы.
Мне просто нужен корневой каталог моего приложения, точка. Есть ли другой способ?
я просто вызываю статическую функцию из своего класса.
Вам нужен доступ к таким подробным инфраструктурным объектам на низком уровне в ваших организациях? Ты делаешь это неправильно.




Я просмотрел свой ответ. Действительно, это вам не подойдет. В любом случае, если вы не хотите использовать внедрение зависимостей для достижения этой цели, потому что у вас есть статические методы, где вы вызываете эти статические методы? В контроллере? В команде? В другом сервисе? Если вы не хотите создавать экземпляр своего класса, потому что вам не нужны объекты с собственными данными, у вас есть 2 варианта:
Я вызываю статические методы в любом месте, где хочу, потому что функция получает файл конфигурации, поэтому мне нужен абсолютный путь к корневому каталогу, поэтому я могу просто конкатенировать /config/config_something.yml, спасибо! похоже, @Francesco дал конкретный ответ. Тем не менее, спасибо за ваши идеи.
Самый простой способ, который я могу придумать, - это определить константу в вашем файле app.php, например:
define("ROOTDIR", $kernel->getRootDir());
так что вы можете затем использовать эту константу где угодно. По сравнению с этим статический метод тоже излишни.
это здорово! хотя я не могу придумать никаких минусов для этого решения. Благодарность! должен был подумать об этом раньше
Можете ли вы передать корневой каталог в качестве параметра конструктора и сообщить об этом контейнеру внедрения зависимостей (DIC)? (Я имею в виду, вы получаете свой собственный класс из DIC? Или, может быть, вы создаете класс самостоятельно (вызываете
new MyClass()где-то)?