![](/img/trans.png)
[英]session_cache_limiter error in symfony2.8 with php 7.2
[英]updated user and session in symfony2.8
我正在使用symfony 2.8,并且正在尝试做:
如果用户是第一次连接,则会显示一个弹出窗口。 我有一个字段“ last_login”,所以我要做的是查看“ last_login”是否为空并显示弹出窗口。 但是问题是我的Vue是在设置last_login之后生成的,所以它不起作用。 然后我尝试创建一个侦听器:
class firstLoginModalListener
{
public function preUpdate(PreUpdateEventArgs $eventArgs)
{
if ($eventArgs->getEntity() instanceof User) {
if ($eventArgs->hasChangedField('lastLogin')) {
if($eventArgs->getOldValue('lastLogin')==null){
//do something here
};
}
}
}
}
但是即使在尝试之前,我也必须知道如何将信息发送到我的树枝,所以我尝试了这一点(只是为了测试树枝和侦听器之间的通信):
class firstLoginModalListener
{
public function preUpdate(PreUpdateEventArgs $eventArgs)
{
if ($eventArgs->getEntity() instanceof User) {
$session = new Session();
$session->start();
$session->set('name','test');
$session->getFlashBag()->add('notice', 'Profile updated');
}
}
}
在我的树枝上尝试了几件事:
<script type="text/javascript">
$(document).ready(function () {
{% for flashMessage in app.session.flashbag.get('notice') %}
console.log('{{ flashMessage }}')
{% endfor %}
alert('ok')
})
</script>
和:
<script type="text/javascript">
$(document).ready(function () {
console.log('{{ app.session.get('name') }}')
})
</script>
但是两者都给了我空洞的结果(我很确定用户已更新)
我认为您的问题是您正在创建一个新会话,而不是注入当前会话。 但是,您应该推断Symfony Security组件的InteractiveLoginEvent
订阅服务器,而不是推断非常复杂的Doctrine事件并听取过多的事件来满足您的需要。 在FOS\\UserBundle\\Security\\InteractiveLoginListener
之前,给它一个优先级,使其可以捕获它。
app.event.listener.first_login_listener:
class: App\Event\Listener\FirstLoginListener
arguments: ['@session']
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin, priority: 10 }
然后在设置last_login之前设置会话:
<?php
namespace App\Event\Listener;
class FirstLoginListener
{
/**
* @var Session
*/
private $session;
/**
* @param Session $session
*/
public function __construct(Session $session)
{
$this->session = $session;
}
/**
* @param InteractiveLoginEvent $event
*/
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
if ($user instanceof UserInterface && $user->getLastLogin() === null) {
$this->session->set('welcome', 'Welcome to your account');
}
}
}
关于树枝部分,请尝试{{ dump(app.session) }}
并从那里拿走。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.