Learning laravel:用 trait 实现代码复用

文档:http://php.net/manual/zh/language.oop5.traits.php

上篇说用 Repository 模式可以实现代码复用,用 trail 同样可以实现代码复用。

定义 CategoryTrait

namespace App\Traits;

use App\Category;
use Cache;

trait CategoryTrait
{
    public function category(){
        return Cache::remember('categories',24*60,function (){
            return Category::all();
        });
    }
}

使用:

<!-- 文件位置 app/ViewComposers/CategoryComposer.php -->

class CategoryComposer{
    use CategoryTrait;

    ......

    public function compose(View $view){
         //用 `this` 关键字直接调用即可
        $categories = $this->category();
        $view->with('categories',$categories);
    }
}

trait 使用中要注意优先级问题,这个问题存在于多个 trait 并且存在同名函数的情况下,参考 https://laravel-china.org/topics/1775/resolve-entrust-trait-conflicts 解决。

转载请注明出处:https://www.hellocode.wang/article/learning-laravel-using-trait-to-implement-code-reuse

评论