![](/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.