Laravel 4.2在帖子上创建视图计数

尼古拉西乌

实际上,我需要在后视图上实现一个计数器。
我的桌子结构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'));
}
phaberest

触发事件

请参阅官方文档

Laravel Event类提供了一个简单的观察者实现,使您可以订阅和侦听应用程序中的事件

在您的代码中,您触发了一个未在任何地方注册的事件。

首先,您需要在触发过程中将数据作为数组传递:

Event::fire('advertissements.view', array($advert));

其次,设置监听器。它可以在您执行的代码中的任何位置,我通常将其放在app/routes.php文件中(其他人可以在app/start/global.phpComposer自动加载的文件或其中...由您决定):

Event::listen('advertissements.view', function($advert) {
    // Do what you want to handle the event
});

PS:仅供参考,这是在Laravel 4.x中处理事件的方式,在Laravel 5中,它有所变化。泰勒(Taylor)改进了流程,增加了工匠命令来帮助制作和设置事件。看看Laravel 5事件文档

为您的柜台

建立模型 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),但可以正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章