跳到主要内容
版本:3.x

添加 Infolist 到 Livewire 组件

准备 Livewire 组件

首先,生成新的 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);

你必须使用 InteractsWithInfolistsInteractsWithForms traits,并在你的 Livewire 组件类中实现 HasInfolistsHasForms 接口:

use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Infolists\Concerns\InteractsWithInfolists;
use Filament\Infolists\Contracts\HasInfolists;
use Livewire\Component;

class ViewProduct extends Component implements HasForms, HasInfolists
{
use InteractsWithInfolists;
use InteractsWithForms;

// ...
}

添加信息列表

接下来,在 Livewire 组件中添加一个方法,该方法接收一个 $infolist 对象作为参数,对其修改并返回:

use Filament\Infolists\Infolist;

public function productInfolist(Infolist $infolist): Infolist
{
return $infolist
->record($this->product)
->schema([
// ...
]);
}

最后,在 Livewire 组件视图中渲染该信息列表:

{{ $this->productInfolist }}

传送数据到信息列表

你可以用两种方式将数据传入到信息列表:

可以传入 Eloquent 模型实例到信息列表的 record() 方法中,将所有的模型属性和关自动映射到消息列表 Schema 中的 Entry:

use Filament\Infolists\Components\TextEntry;
use Filament\Infolists\Infolist;

public function productInfolist(Infolist $infolist): Infolist
{
return $infolist
->record($this->product)
->schema([
TextEntry::make('name'),
TextEntry::make('category.name'),
// ...
]);
}

此外,也可以传送数据数组到信息列表的 state() 方法中,手动将数据映射到信息列表 Schema 中的 Entry:

use Filament\Infolists\Components\TextEntry;
use Filament\Infolists\Infolist;

public function productInfolist(Infolist $infolist): Infolist
{
return $infolist
->state([
'name' => 'MacBook Pro',
'category' => [
'name' => 'Laptops',
],
// ...
])
->schema([
TextEntry::make('name'),
TextEntry::make('category.name'),
// ...
]);
}