组件
在 Blade 视图中渲染信息列表
设置 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);
你必须在你的 Livewire 组件类中使用 InteractsWithSchemas
trait 并实现 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 模型实例传递给信息列表的 record()
方法,以自动将所有模型属性和关联映射到信息列表 Schema 中的条目:
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'),
// ...
]);
}
或者,你也可以将数据数组传递给信息列表的 state()
方法,以手动将数据映射到信息列表 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'),
// ...
]);
}
Edit on GitHubStill need help? Join our Discord community or open a GitHub discussion