带有 FlashBag 消息的 RedirectResponse - Symfony2
RedirectResponse with FlashBag messages - Symfony2
我正在尝试在我的身份验证服务中设置带有 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 %}
twig 模板中没有消息...
我想知道,redirectresponse 是否刷新了所有的闪现消息?
Symfony 无法神奇地获取所有 Session 实例并使用它。它只知道它自己创建的实例。那些住在 Service Container。您应该从此容器中获取 session
服务并改用它。
由于您可能在服务中,因此您应该使用如下内容更新您的服务定义:
services:
your_service:
class: ...
arguments: ["@session"]
现在,更新您的 class 以将会话服务保存在 属性:
// ...
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', ...);
// ...
}
刚刚我解决了这个问题。调用 {{ dump(app.session.flashbag.all) }}
后你的闪光灯袋变空了。
使用一次此代码:
{% for message in app.session.flashbag.get('error') %}
<div class="alert alert-danger">{{ message|trans }}</div>
{% endfor %}
检查"if ..."不需要或者你再做一次flashbag清空,一切正常。
我正在尝试在我的身份验证服务中设置带有 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 %}
twig 模板中没有消息...
我想知道,redirectresponse 是否刷新了所有的闪现消息?
Symfony 无法神奇地获取所有 Session 实例并使用它。它只知道它自己创建的实例。那些住在 Service Container。您应该从此容器中获取 session
服务并改用它。
由于您可能在服务中,因此您应该使用如下内容更新您的服务定义:
services:
your_service:
class: ...
arguments: ["@session"]
现在,更新您的 class 以将会话服务保存在 属性:
// ...
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', ...);
// ...
}
刚刚我解决了这个问题。调用 {{ dump(app.session.flashbag.all) }}
后你的闪光灯袋变空了。
使用一次此代码:
{% for message in app.session.flashbag.get('error') %}
<div class="alert alert-danger">{{ message|trans }}</div>
{% endfor %}
检查"if ..."不需要或者你再做一次flashbag清空,一切正常。