实际上我需要在帖子视图上实现一个计数器
表Advertissements
的结构是
Id, Title, Descritpion, Content, view_count, visited_date, Ip
我尝试使用某个活动,但这不是我认为的最佳做法。我不知道在哪里放置代码。
public function show($slug) {
$advert = Advertissement::where('slug', $slug)->firstOrFail();
$author = $advert->user;
$socials = Social::all();
$catAdvert = AdvertCategory::with(['advertissements' => function($query){
$query->orderBy('created_at', 'DESC')->get();
}]);
//Event problem here
Event::fire('advertissements.view', $advert);
return View::make('advertissements.show', compact('advert', 'author', 'catAdvert', 'socials'));
}
答案 0 :(得分:1)
Laravel Event类提供了一个简单的观察者实现,允许您在应用程序中订阅和侦听事件。
在您的代码中,您将触发未在任何地方注册的事件。
首先,您需要在触发过程中将数据作为数组传递:
Event::fire('advertissements.view', array($advert));
其次,设置监听器。它可以在您执行的代码中的任何位置,我通常将其放在app/routes.php
文件中(其他人在app/start/global.php
或在作曲家自动加载的文件中执行...它取决于您):
Event::listen('advertissements.view', function($advert) {
// Do what you want to handle the event
});
PS:FYI这是处理Laravel 4.x事件的方法,在Laravel 5中它已经改变了一点。泰勒已经改进了这个过程,增加了工匠命令来帮助制作和设置活动。请查看Laravel 5 events docs
创建模型Counter
class Counter extends Eloquent {
protected $table = 'counters';
public function advertissement()
{
return $this->belongsTo('Advertissement');
{
}
在Advertissement
模型中添加
public function counter()
{
return $this->hasOne('Counter');
{
在Counter
的迁移中为advertissement_id
添加无符号整数,为views
添加另一个未定义的整数,然后在侦听器中使用:
Event::listen('advertissements.view', function($advert) {
$counter = new Counter();
$counter->views = $advert->counter()->views++;
$advert->counter()->save($counter);
});
未经过测试(我现在没有在我的机器上运行4.2),但应该可以使用。