Symfony4 перенаправляет всех пользователей, у которых нет роли администратора, используя kernel.exception - PullRequest
1 голос
/ 22 апреля 2019

Я хочу перенаправить всех пользователей, у которых нет роли администратора, на домашнюю страницу с kernel.exception

это моя страница контроллера:

<?php

namespace App\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class ProduitController extends AbstractController
{
    /**
     * @Route("/produit", name="produit")
     * @IsGranted("ROLE_ADMIN")
     */
    public function index()
    {
        return $this->render('produit/index.html.twig');
    }
}

это EventListener:

<?php

namespace App\EventListener;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;

class NotAuthenticationListener
{
    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $exception = $event->getException();

        if (!$exception instanceof AccessDeniedException) {
            return;
        }
        return new Response("Access Denied !");
    }
}

service.yaml

App\EventListener\NotAuthenticationListener:
    tags:
        - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }

, но он не работает введите описание изображенияздесь

1 Ответ

0 голосов
/ 22 апреля 2019

Я всегда люблю , чтобы цитировать документацию.В этом случае GetResponseForExceptionEvent :

 /**
 * Allows to create a response for a thrown exception.
 *
 * Call setResponse() to set the response that will be returned for the
 * current request. The propagation of this event is stopped as soon as a
 * response is set.
 *
 * You can also call setException() to replace the thrown exception. This
 * exception will be thrown if no response is set during processing of this
 * event.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 */

по существу: возвращать что-либо в EventListener просто ... бесполезно.Вы должны позвонить setResponse на событие и установить свой ответ таким образом.

Надеюсь, это поможет; o)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...