В настоящее время я работаю над проектом, созданным на Api-платформе и использующим Symfony4.
Моя цель - иметь возможность использовать TokenStorage внутри EntityListener, чтобы узнать личность моего пользователя.
К сожалению, я не могу найти способ передать TokenStorageInterface в качестве аргумента.
И система электропроводки, похоже, не работает.
services.yaml:
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
locale: 'en'
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
public: false # Allows optimizing the container by removing unused services; this also means
# fetching services directly from the container via $container->get() won't work.
# The best practice is to be explicit about your dependencies anyway.
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests}'
# controllers are imported separately to make sure services can be injected
# as action arguments even if you don't extend any base controller class
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
App\EntityListener\KpiDateListener:
public: true,
arguments:
$tokenStorage: '@security.token_storage'
KpiDateListener.php:
<?php
namespace App\EntityListener;
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Manager\UserManager;
use App\Entity\KpiDate;
use App\Entity\StateDate;
use App\Security\User\UserProvider;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Psr\Log\LoggerInterface;
use Symfony\Component\Security\Core\Authentication\AuthenticationProviderManager;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class KpiDateListener
{
private $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public function postPersist(KpiDate $kpiDate, LifecycleEventArgs $args)
{
//Here is my function
}
}
У меня всегда одна и та же ошибка:
Слишком мало аргументов для функции App \ EntityListener \ KpiDateListener :: __ construct (), 0 передано в /srv/api/vendor/doctrine/doctrine-bundle/Mapping/ContainerAwareEntityListenerResolver.php в строке 76 и ожидается ровно 1
Что-то не так или отсутствует?
Спасибо