Symfony 2: как запустить код перед КАЖДЫМ контроллером-действием?

Я хотел бы проверить, вошел ли пользователь в систему — до действие называется.

Что-то вроде preDispatch() за Symfony\Bundle\FrameworkBundle\Controller\Controller было бы замечательно.

Я бы хотел избежать этот:

class MyBaseController extends Controller {
public function __construct() {
// ...
// check: logged in?
// ...
}
}

class MyFooController extends MyBaseController() {
// ...
}

Я только нашел темы с 2011/2012. Я новичок в Symfony, использую версию 2.5 и хотел бы узнать лучшие практики с самого начала. Любые советы?

Заранее спасибо!

редактировать:

интересно:
http://symfony.com/doc/current/cookbook/event_dispatcher/before_after_filters.html

5

Решение

1 / Вы можете настроить до (и после) фильтры с kernel.controller Событие.
Вот хороший пример из документация.

2 / Вы также можете создать прослушиватель событий, который слушает kernel.request четноеt и проверьте, аутентифицирован ли пользователь, прежде чем нацеливаться на какой-либо контроллер.

Это первое событие, отправленное HttpKernel, и оно в основном используется для добавления информации в Запрос или возврата раннего ответа, когда это необходимо (например, для запрета доступа для пользователей, не прошедших проверку подлинности, или пользователей, у которых нет разрешения на доступ к какому-либо данному ресурсу). ,

Вы также можете создать слушателя на kernel.controller событие (как объяснено в примере из документации, которую я перечислил ранее). Это событие отправляется после того, как вызываемый контроллер был определен HttpKernel. Он в основном используется для инициализации вещей перед выполнением контроллера, он также используется для изменения контроллера для выполнения

Вы должны прочитать документация по компоненту HttpKernel чтобы получить общую картину того, как Symfony ведет себя внутренне.

3 / Вы также можете использовать @ Аннотация безопасности который ограничивает доступ на контроллерах,

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;

class MyFooController extends Controller
{
/**
* @Security("has_role('ROLE_USER')")
*/
public function anyAction()
{
// ...
14

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

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

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