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 !!}