laravel返回后执行代码

时间:2015-01-25 12:22:44

标签: php laravel

我想在返回View :: make('view')之后执行一些代码; 那是否可能在laravel?我知道我可以把我的代码放到我的视图中,但这是一种不好的做法,这是我的代码:

if (!$conversation == null) {
			// here I update last_viewed time
		    $conversation_memb=$conversation->members()->where('user_id',Auth::user()->id)->first();
		    $conversation_memb->last_viewed = time();
		    $conversation_memb->save();
		    
            // here I return View with some data
			return View::make('messages.conversation')->with('conversation',$conversation)->with('messages',$conversation->messages()->orderBy('created_at','DESC')->take(10)->get()->reverse());
			
		}

所以我想在加载视图后更新last_view的时间,所以消息将显示为“未读”

2 个答案:

答案 0 :(得分:0)

你正在以错误的方式思考这个问题。显示视图后,您无需更新数据;而不是这个,只需让视图知道发生了什么。

大概现在,视图通过将某个时间戳与通过直接到达last_viewed得到的$conversation值进行比较来了解消息是否未读。不要那样做。在将数据库更新为变量之前保存先前的last_viewed值,将该变量传递到视图中并将视图与该变量进行比较。

答案 1 :(得分:0)

使用Laravel,您可以在将响应发送给用户之后运行此类任务。通过关闭与浏览器的连接后,使PHP进程保持活动状态以运行任务来工作。您可以使用以下方法做到这一点:

Job::dispatchAfterResponse()使用Laravel v6.14.0或更高版本。