Symfony2: страница 404 и авторизация

03 Sep 2015

Все знают, что в symfony2 404я страница не попадает под действие фаерволов. А это значит, что даже пытаясь кастомизировать 404ую страницу мы не сможем получить имя пользователя и его роль в системе. Так как механизм авторизации попросту не загружается.

Однако, существует решение, которое позволяет кастомизировать страницу 404 с учетом пользовательских данных.

Для этого нам надо завести роут подпадающий под действия фаерволлов и при этом откликающийся на любой (!) введенный адрес перехода.

Экшн будет отдавать эксепшн NotFoundHttpException. Таким образом мы получим ситуацию, когда при переходе на 404ую все фаерволы запущены и данные пользователя загружены.

namespace ProjectBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;  
use Symfony\Bundle\FrameworkBundle\Controller\Controller;  
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class DefaultController extends Controller  
{  
 //...

/\*\*  
 \* Данный роут перехватывает все переходы в системе, которые не охвачены другими роутами.  
 \* @Route("/{path}", name="\_inner404Redirect")  
 \*/  
 public function inner404Redirect()  
 {  
 throw new NotFoundHttpException();  
 }  
}

Источник