我正在扩展身份验证失败处理程序,一切正常,但有一个小问题。
这是我的 services.yml:
http.utils.class:
class: Symfony\Component\Security\Http\HttpUtils
auth.fail:
class: Acme\MyBundle\AuthenticationFailure
arguments:
- @http_kernel
- @http.utils.class
- []
我已将其设置为在 security.yml 中使用:
failure_handler: auth.fail
这是我的 Acme\MyBundle\AuthenticationFailure.php:
namespace Acme\MyBundle;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Http\Authentication\DefaultAuthenticationFailureHandler;
use Symfony\Component\HttpFoundation\Response;
class AuthenticationFailure extends DefaultAuthenticationFailureHandler
{
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
//do something
}
}
问题是我在 security.yml 中设置的选项被忽略了。我知道类的 _construct 方法的第三个参数是 $options 数组,并且我没有将任何东西作为第三个参数(在 services.yml 中)传递,所以我猜这是问题所在,解决方案可以只是传递值。我猜我也可以做这样的事情:
arguments:
- @http_kernel
- @http.utils.class
- %security.firewalls.secure_area.form_login%
....我还没有测试过,因为问题是这是在 services.yml 中的硬编码,而且它并不理想,因为如果我更改了 secure_area 的名称它会中断。当然,这些值可以以更好的方式获得吗?