Получить Symfony Container в EntityRepository - PullRequest
8 голосов
/ 01 апреля 2012

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

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

Спасибо:)

Ответы [ 5 ]

10 голосов
/ 30 апреля 2013

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

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

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

Таким образом, вы можете получить доступ к контейнеру с

$kernel->getContainer();

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

10 голосов
/ 01 апреля 2012

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

5 голосов
/ 18 апреля 2012

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

Ex:

class CustomRepository extends EntityRepository
{
    public function myCustomFunction()
    {
        $conn = $this->getEntityManager()->getConnection();
        $stmt = $conn->query($sql);
        if ($stmt)
        {
            while ($row = $stmt->fetch())
                var_dump($row);
        }             
    }
}
1 голос
/ 05 июня 2013

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

services:
    your_service:
        class: YourServiceClass
        arguments: [%some.parameter%]
1 голос
/ 01 апреля 2012

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

public function findAllOrderedByFoo($your_variable)
{
    //use $your_variable here

    return $this->getEntityManager()
        ->createQuery(  your SQL here   )
        ->getResult();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...