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 に答える