我尝试在我的身份验证服务中使用RedirectResponse设置Flash消息以进行登录。
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
if($request->isXmlHttpRequest()) {
return JsonResponse::create([
'status' => false,
'message' => $exception->getMessage(),
'callback' => 'Login.failed'
]);
} else {
$session = new Session();
$session->getFlashBag()->set('error', $exception->getMessage());
var_dump($session->getFlashBag()->all()); die; // Works here.
return new RedirectResponse('/login');
}
}
嫩枝:
{{ dump(app.session.flashbag.all) }}
{% for message in app.session.flashbag.get('error') %}
<div class="alert alert-danger">{{ message|trans }}</div>
{% endfor %}
树枝模板中没有留言......
我想知道,如果redirectresponse刷新所有flash消息?
答案 0 :(得分:1)
Symfony无法神奇地获取所有Session实例并使用它。它只知道它自己创建的实例。那些住在Service Container。您应该从此容器中获取session
服务,然后使用该服务。
由于您可能在服务中,因此您应该使用以下内容更新服务定义:
services:
your_service:
class: ...
arguments: ["@session"]
现在,更新您的类以将会话服务保存在属性中:
// ...
use Symfony\Component\HttpFoundation\Session\Session;
// ...
class YourClassName
{
private $session;
public function __construct(Session $session)
{
$this->session = $session;
}
}
现在,使用保存在属性中的会话实例:
// ...
public function onAuthenticationFailure(...)
{
// ...
$this->session->getFlashBag()->set('error', ...);
// ...
}
答案 1 :(得分:1)
我解决了这个问题。在调用{{ dump(app.session.flashbag.all) }}
后,你的flashbag变空了。
使用此代码:
{% for message in app.session.flashbag.get('error') %}
<div class="alert alert-danger">{{ message|trans }}</div>
{% endfor %}
检查“如果...”不需要或你再次将flashbag弄空,一切正常。