2016-06-30 3 views
1

Я пытаюсь манипулировать целевым путем входа в систему безопасности Symfony, поскольку мое приложение выполняет некоторые вызовы AJAX. Я последовал за this documentation article, но ничего не происходит (поэтому я предположил, что security.exception_listener.class не «правильно зацепил»). Когда я googled, я нашел this issue с 2015 года на github, который утверждает, что решение в предоставленной документации будет недействительным в Symfony> = 3.Symfony3 security.exception_listener.class не работает

Теперь мне просто интересно - кто-нибудь знает, действительно ли связанная документация устарела (похоже, это так, потому что это не работает для меня), и как вы делаете то же самое в Symfony 3?

+0

Вы можете попробовать с Symfony 2.8 (который в настоящее время лучше, чем 3. *, будучи LTS, по крайней мере до 3,4 будет отсутствовать). Просто замените ограничение для «symfony/symfony» на «2.8. *» В вашем composer.json и запустите обновление для компоновщика –

+0

Я предполагаю, что это вариант, хотя он, конечно, не соблазнителен. Но они не могут удалить такую ​​важную функцию? –

+0

Вы нашли решение на этом? Я попробовал решение, указанное в комментариях к проблеме, и это работает для меня. Однако предпочли бы параметр. –

ответ

0

Документации для Symfony 2.7 был обновлен для использования компилятора прохода: https://symfony.com/doc/2.7/security/target_path.html

Я полагаю, что это изменение будет течь через к более поздним версиям документации в ближайшее время.

// src/AppBundle/Security/Firewall/ExceptionListener.php 
namespace AppBundle\Security\Firewall; 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Security\Http\Firewall\ExceptionListener as BaseExceptionListener; 

class ExceptionListener extends BaseExceptionListener 
{ 
    protected function setTargetPath(Request $request) 
    { 
     // Do not save target path for XHR requests 
     // You can add any more logic here you want 
     // Note that non-GET requests are already ignored 
     if ($request->isXmlHttpRequest()) { 
      return; 
     } 

     parent::setTargetPath($request); 
    } 
} 
// src/AppBundle/DependencyInjection/Compiler/ExceptionListenerPass.php 
namespace AppBundle\DependencyInjection\Compiler; 

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 
use AppBundle\Security\Firewall\ExceptionListener; 

class ExceptionListenerPass implements CompilerPassInterface 
{ 
    public function process(ContainerBuilder $container) 
    { 
     // Use the name of your firewall for the suffix e.g. 'secured_area' 
     $definition = $container->getDefinition('security.exception_listener.secured_area'); 
     $definition->setClass(ExceptionListener::class); 
    } 
} 
// src/AppBundle/AppBundle.php 
namespace AppBundle; 

use AppBundle\DependencyInjection\Compiler\ExceptionListenerPass; 

class AppBundle extends Bundle 
{ 
    public function build(ContainerBuilder $container) 
    { 
     $container->addCompilerPass(new ExceptionListenerPass()); 
    } 
} 
Смежные вопросы