Статический метод symfony easyadmin query_builder вводит token_storage

Я использую symfony 3.4 и easycorp/easyadmin-bundle 1.17.

Я пытаюсь использовать статическую функцию для параметров query_builder:

form:
    fields:
        ...
        - { property: 'customer', label: '', type_options: { query_builder: ['AppBundle\Repository\PersonRepository', 'getCustomer'] } }

репозиторий:

class PersonRepository extends EntityRepository
{
    public static function getCustomer(EntityRepository $er)
    {
        //        dump($tokeStorage);
        dump($er);
        die;
        $user = null; // how to get token_storage ?
        $query = $er->createQueryBuilder('person')
            ->leftJoin('person.userCreated', 'user')
            ->andWhere('person.type = :type')
            ->setParameter('type', 2)
        ;
        if (in_array("ROLE_ADMIN", $user->getRoles())) {
            $query->andWhere('user.company = :company');
            $query->setParameter('company', $user->getCompany());
        } else {
            $query->andWhere('user.id = :user');
            $query->setParameter('user', $user->getId());
        }

        return $query;
    }
}

Мне нужно внедрить хранилище токенов, как мне это сделать?

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

[конструктор пользовательских форм symfony easyadmin

[объект типа поля формы symfony easyadmin со списком фильтров

заранее спасибо


person Johan Rm    schedule 13.09.2018    source источник
comment
Внедрение зависимостей и статика на самом деле не очень хорошо сочетаются друг с другом. Кроме того, ваш PersonRepository уже расширяет EntityRepository, поэтому внедрение другого репозитория не имеет особого смысла.   -  person Cerad    schedule 13.09.2018
comment
есть ли другой способ передать текущего пользователя в query_builder этого поля?   -  person Johan Rm    schedule 13.09.2018
comment
Используйте сеттер для внедрения хранилища токенов и соответствующей настройки файла services.yaml. Хотя в этом случае я бы, вероятно, просто передал $roles в качестве аргумента для getCustomer. И если вам пришлось спрашивать несколько раз, возможно, вам стоит сделать шаг назад и действительно посмотреть на то, что вы спрашиваете.   -  person Cerad    schedule 13.09.2018