展示器
建议编辑展示器是包装对象并为其提供附加功能的类。在 Orchid 中,展示器用于一致地格式化和展示数据,并帮助保持视图的整洁和有序。您可以将所有格式化和展示逻辑移到展示器类中,从而保持关注点分离。
创建一个展示器
在这个例子中,假设我们有一个 “Customer” 模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Customer extends Model
{
protected $fillable = [
'firstName',
'lastName'
];
}
在这个类的实例被包装在一个展示器之前,您必须创建它:
namespace App\Presenters;
use Orchid\Support\Presenter;
class CustomerPresenter extends Presenter
{
public function fullName(): string
{
return sprintf('%s %s',
$this->entity->firstName,
$this->entity->lastName
);
}
}
之后,我们可以这样使用它:
use App\Customer;
use App\Presenters\CustomerPresenter;
$customer = new Customer([
'fistName' => 'Alexandr',
'lastName' => 'Chernyaev'
]);
$presenter = new CustomerPresenter($customer);
$presenter->fullName();
注意 展示器接收模型的
firstName
和lastName
属性,因为它没有这些属性。
通常,没有必要每次单独创建和传递展示器,为此,我们在模型中指明这个创建:
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Presenters\CustomerPresenter;
class Customer extends Model
{
protected $fillable = [
'firstName',
'lastName'
];
public function presenter(): CustomerPresenter
{
return new CustomerPresenter($this);
}
}
注意。 许多平台功能在
presenter
方法中期望一个展示器。
现在它的使用变得更加简单:
use App\Customer;
$customer = Customer::findOrFail(1)->presenter()->fullName();
在集合中使用展示器
如果您想获取展示器列表,可以使用集合方法,例如:
use App\Customer;
$customers = Customer::limit(10)->get()->map->presenter();
foreach($customers as $customer)
{
$customer->fullName();
}
为模型使用展示器是自动显示 Layouts
数据的常见做法。