Api-платформа Symfony не присоединяется к слушателю событий

Событие api-platform.com не будет прикреплено к моему слушателю. Я попробовал несколько комбинаций из их матрицы событий, но она все равно не сработает.

# services.yml
user_access_listener:
class:      AppBundle\Event\Listener\UserAccessListener
arguments: [ "@security.authorization_checker" ]
tags:
- { name: kernel.event_listener, event: kernel.view, method: onKernelView }

Вот мой класс слушателя

пространство имен AppBundle \ Event \ Listener;

use UserBundle\Entity\User;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;

class UserAccessListener
{
/**
* @var AuthorizationCheckerInterface
*/
private $authorizationChecker;

/**
* @param AuthorizationCheckerInterface $authorizationChecker
*/
public function __construct(AuthorizationCheckerInterface $authorizationChecker)
{
$this->authorizationChecker = $authorizationChecker;

}

/**
* @param GetResponseForControllerResultEvent $event
*/
public function onKernelView(GetResponseForControllerResultEvent $event)
{

echo "This should trigger";
exit;

$user = $event->getControllerResult();
if (!$user instanceof User) {
return;
}

if (!$this->authorizationChecker->isGranted(null, $user)) {
throw new AccessDeniedException();
}
}
}

Описание событий api-платформы

Я ожидал, что «Это должно сработать» появится, когда я нажму GET /projects/1 а также GET /projects, но это не срабатывает. Мысли?

0

Решение

Вы должны использовать более высокий приоритет (например, 70), чтобы быть уверенным, что ваш слушатель выполняется перед слушателями со встроенным представлением.

Пример:

user_access_listener:
class:      AppBundle\Event\Listener\UserAccessListener
arguments: [ "@security.authorization_checker" ]
tags:
- { name: kernel.event_listener, event: kernel.view, method: onKernelView, priority: 70 }
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]