信息列表
添加 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);你必须使用 InteractsWithInfolists 和 InteractsWithForms traits,并在你的 Livewire 组件类中实现 HasInfolists 和 HasForms 接口:
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'),            // ...        ]);}Still need help? Join our Discord community or open a GitHub discussion