laravel 5.5 以上使用laracasts/presenter

发布时间:2023-10-12 09:53:30 浏览次数:288

composer 安装

composer require laracasts/presenter

生成一个presenter命令

php artisan make:command MakePresenter

该命令会在app/console/Commands目录下生成一个MakePresenter.php文件

自定义命令

app/console/Commands/MakePresenter.php

<?php
namespace App\Console\Commands;

use Illuminate\Console\GeneratorCommand;

class MakePresenter extends GeneratorCommand{
    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'make:presenter';
    
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a new presenter class';
    
    /**
     * The type of class being generated.
     *
     * @var string
     */
    protected $type = 'Presenters';
    
    /**
     * Get the stub file for the generator.
     *
     * @return string
     */
    protected function getStub()
    {
        return __DIR__.'\Stubs\presenter.stub';
    }
    
    /**
     * Get the default namespace for the class.
     *
     * @param  string  $rootNamespace
     * @return string
     */
    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace."\Presenters";
    }
}

自定义一个presenter模板

app/console/Commands/Stubs/presenter.stub

<?php
namespace DummyNamespace;

use Laracasts\Presenter\Presenter;

class DummyClass extends Presenter{

}

执行命令

php artisan make:presenter CategoryPresenter

运行成功后,会在app/Presenters目录下生成CategoryPresenter.php文件

app/Presenters/CategoryPresenter.php

<?php
namespace App\Presenters;

use Laracasts\Presenter\Presenter;

class CategoryPresenter extends Presenter{
    // 自定义方法
    public function fullName()
    {
       return $this->firstName.' · '.$this->lastName
    }
}

使用

在 model 中引入

app/Models/Category

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Laracasts\Presenter\PresentableTrait;  // 引入PresentableTrait

class Category extends Model{
    use PresentableTrait;

    protected $presenter = 'App\Presenters\CategoryPresenter';  // 绑定presenter
    
    protected $guarded = [];
}

blade页面上使用

{!! $category->present()->fullName !!}


最新文章
备案号:赣ICP备2022011147号-1
备案号:赣ICP备2022011147号-2