Я хотел бы проверить, вошел ли пользователь в систему — до действие называется.
Что-то вроде 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
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()
{
// ...
Других решений пока нет …