我正在使用symfony 2.8并且我正在尝试:
如果用户第一次连接,则会显示一个弹出窗口。我有一个字段" last_login"所以我所做的就是看看" last_login"为null并显示弹出窗口。但问题是我的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>
但两个都给了我空洞的结果(我非常确定用户已更新)
答案 0 :(得分:2)
我认为您的问题是您正在创建新会话而不是注入当前会话。但是,您应该将订阅者添加到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) }}
然后从那里拿走它。