Не удается получить IriConverter из контейнера, потому что он не общедоступен

Я пытаюсь загрузить api_platform.iri_converter но получаю ошибку:

Служба или псевдоним \"api_platform.iri_converter\" были удалены или встроены, когда контейнер был скомпилирован. Вы должны либо сделать его общедоступным, либо прекратить использование контейнера напрямую и вместо этого использовать внедрение зависимостей.

Это код:

declare(strict_types=1);

namespace App\Security\Authorization\Voter;

use Symfony\Component\DependencyInjection\ContainerInterface;

abstract class BaseVoter extends Voter
{
    public ContainerInterface $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }
}
declare(strict_types=1);

namespace App\Security\Authorization\Voter;

class VenueVoter extends BaseVoter
{
    protected function voteOnAttribute(): bool
    {
        /** @var User $tokenUser */
        $tokenUser = $token->getUser();

        if (self::VENUE_CREATE === $attribute) {
            $iri = $this->container->get('api_platform.iri_converter')->getItemFromIri($valueWithIri);
        }
    }
}

1 ответ

Решение

Не вводите контейнер.

Вместо этого введите IriConverter прямо.

use ApiPlatform\Core\Bridge\Symfony\Routing\IriConverterInterface;

abstract class BaseVoter extends Voter
{
    public IriConverterInterface $iriConverter;

    public function __construct(IriConverterInterface $iriConverter)
    {
        $this->iriConverter = $iriConverter;
    }
}
Другие вопросы по тегам