我正在创建一个简单的博客,用户可以添加,更新和查看帖子。我在帖子中实现了观看次数计数功能,该帖子显示了帖子上的观看次数。为此,我所做的是:
创建了一个事件监听器:
Event::listen('post.viewed', 'PostHandler@updatePostViewsAction');
创建了PostHandler
和updatePostViewsAction
class PostHandler
{
public function handle()
{
//
}
public function updatePostViewsAction( $post )
{
// Update view counter of post
$post->views_count = $post->views_count + 1;
$post->save();
}
}
这是工作正常,并且视图计数已成功更新。但稍后我决定使视图得到唯一计数。为此,我有< strong>尝试使用Cookie 即在用户计算机上创建 Cookie ,只要他查看帖子并增加views_count
。如果用户再次回来并再次查看帖子,请检查是否有可用的Cookie ,如果可用则不要增加{ {1}} ,否则增加。下面是我如何实现这个:
views_count
但它似乎不起作用,因为每次都会增加views_count 。谁能告诉我,我在这里做错了什么?
答案 0 :(得分:4)
为了使用Laravel保存cookie,您需要将其发送给响应。但是,您可以通过将cookie发送到队列来解决此问题。
public function updatePostViewsAction( $post )
{
if ( !Cookie::get('post_viewed') ) {
// Update view counter of post
$post->views_count = $post->views_count + 1;
$post->save();
// Create a cookie before the response and set it for 30 days
Cookie::queue('post_viewed', true, 60 * 24 * 30);
}
}
来自Laravel文档的来源http://laravel.com/docs/requests#cookies:
为下一个响应排队Cookie
如果您想在创建响应之前设置cookie,请使用Cookie :: queue()方法。 cookie将自动附加到您的应用程序的最终响应中。