1

我想在 Symfony2 中扩展 DefaultAuthenticationFailureHandler。

我不想替换它,只是扩展它。

我基本上想挂接故障处理程序,因此如果满足条件而不是像故障处理程序那样重定向,我可以执行不同的操作。

我想我需要将其作为一项服务来做。

我在 services.yml 中有这个

extend.auth.fail:
    class: MyBundle\Bundle\AuthenticationFailure

在 security.yml 中:

security:

    firewalls:

        secure_area:
            pattern: ^/admin
            form_login:
                login_path: login
                check_path: login_check
                failure_handler: extend.auth.fail

在 AuthenticationFailure.php 中

namespace Symfony\Component\Security\Http\Authentication;

class AuthenticationFailure extends DefaultAuthenticationFailureHandler
{

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
    {

        //do something here instead

    }

}

...但我收到此错误:

FatalErrorException: Compile Error: Declaration of Symfony\Component\Security\Http\Authentication\AuthenticationFailure::onAuthenticationFailure() must be compatible with that of Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface::onAuthenticationFailure() in /var/symfony/src/MyBundle/Bundle/AuthenticationFailure.php line 18
4

1 回答 1

1

错误的命名空间

命名空间Symfony\Component\Security\Http\Authentication应该MyBundle\Bundle在你的扩展类中。

缺少使用语句

确保您的扩展类中有 Request 和 AuthenticationException 的 use 语句。

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Exception\AuthenticationException;

否则 php 将寻找不存在且不兼容的类MyBundle\Bundle\RequestMyBundle\Bundle\AuthenticationException.

于 2013-07-07T20:56:56.203 回答