Получить контейнер Symfony в EntityRepository

Я установил переменную в параметрах.ini, но теперь я хочу получить эту переменную из EntityRepository, а $this->container не установлен, поэтому я не могу этого сделать

Как мне добраться до контейнера?

Благодаря 🙂

Вы не должны использовать $ container в EntityRepository. Вместо этого создайте службу диспетчера моделей и введите контейнер через DI.

Брат, Симфония иногда или много раз – головная боль, вот хакерский путь, не правильный, как ответ @Tuong Le, но ужас делает много для просто переменной, как это было сказано @keyboardSmasher.

В начале функции / метода вы можете:

 global $kernel; if($kernel instanceOf \AppCache) $kernel = $kernel->getKernel(); 

Таким образом, вы можете приобрести контейнер с

 $kernel->getContainer(); 

надеюсь, это даст вам время, чтобы пойти в парк =),

Если вы пытаетесь получить доступ к DBAL из класса EntityRepository, вы можете использовать $ this-> getEntityManager () -> getConnection () для его получения.

Пример:

 class CustomRepository extends EntityRepository { public function myCustomFunction() { $conn = $this->getEntityManager()->getConnection(); $stmt = $conn->query($sql); if ($stmt) { while ($row = $stmt->fetch()) var_dump($row); } } } 

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

 public function findAllOrderedByFoo($your_variable) { //use $your_variable here return $this->getEntityManager() ->createQuery( your SQL here ) ->getResult(); } 

Если вам действительно нужно передать аргумент службе, вы можете просто передать его без необходимости в менеджере, например:

 services: your_service: class: YourServiceClass arguments: [%some.parameter%]