在继续之前,请确保 filament/infolists 已安装在您的项目中。您可以通过运行以下命令进行检查:
composer show filament/infolists如果尚未安装,请查阅 安装指南 并按照说明配置各个组件。
首先,生成一个新的 Livewire 组件:
php artisan make:livewire ViewProduct然后,在页面上渲染你的 Livewire 组件:
@livewire('view-product')或者,你可以使用一个全页的 Livewire 组件:
use App\Livewire\ViewProduct;
use Illuminate\Support\Facades\Route;
Route::get('products/{product}', ViewProduct::class);您必须使用 InteractsWithSchemas trait,并在您的 Livewire 组件类上实现 HasSchemas 接口:
use Filament\Schemas\Concerns\InteractsWithSchemas;
use Filament\Schemas\Contracts\HasSchemas;
use Livewire\Component;
class ViewProduct extends Component implements HasSchemas
{
use InteractsWithSchemas;
// ...
}接下来,为 Livewire 组件添加一个方法,该方法接受一个 $infolist 对象,修改它,并返回它:
use Filament\Schemas\Schema;
public function productInfolist(Schema $schema): Schema
{
return $schema
->record($this->product)
->components([
// ...
]);
}最后,在 Livewire 组件的视图中渲染信息列表:
{{ $this->productInfolist }}您可以向信息列表传递数据,有两种方式:
要么将一个 Eloquent 模型实例传递给 infolist 的 record() 方法,以便自动将所有模型属性和关联映射到 infolist 架构中的条目:
use Filament\Infolists\Components\TextEntry;
use Filament\Schemas\Schema;
public function productInfolist(Schema $schema): Schema
{
return $schema
->record($this->product)
->components([
TextEntry::make('name'),
TextEntry::make('category.name'),
// ...
]);
}或者,你可以向 infolist 的 state() 方法传递一个数据数组,以手动将数据映射到 infolist 的 schema 中的条目:
use Filament\Infolists\Components\TextEntry;
use Filament\Schemas\Schema;
public function productInfolist(Schema $schema): Schema
{
return $schema
->constantState([
'name' => 'MacBook Pro',
'category' => [
'name' => 'Laptops',
],
// ...
])
->components([
TextEntry::make('name'),
TextEntry::make('category.name'),
// ...
]);
}