Я установил переменную в параметрах.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%]