Representación de una infolista en una vista Blade
Antes de continuar, asegúrese de que filament/infolists esté instalado en su proyecto. Puedes comprobarlo ejecutando:
composer show filament/infolists
Si no está instalado, consulte la guía de instalación y configure los componentes individuales según las instrucciones.
Configurando el componente Livewire
Primero, genere un nuevo componente Livewire:
php artisan make:livewire ViewProduct
Luego, renderice su componente Livewire en la página:
@livewire('view-product')
Alternativamente, puede utilizar un componente Livewire de página completa:
use App\Livewire\ViewProduct;
use Illuminate\Support\Facades\Route;
Route::get('products/{product}', ViewProduct::class);
Debe utilizar el rasgo InteractsWithSchemas e implementar la interfaz HasSchemas en su clase de componente Livewire:
use Filament\Schemas\Concerns\InteractsWithSchemas;
use Filament\Schemas\Contracts\HasSchemas;
use Livewire\Component;
class ViewProduct extends Component implements HasSchemas
{
use InteractsWithSchemas;
// ...
}
Agregar la infolista
A continuación, agregue un método al componente Livewire que acepte un objeto $infolist, lo modifique y lo devuelva:
use Filament\Schemas\Schema;
public function productInfolist(Schema $schema): Schema
{
return $schema
->record($this->product)
->components([
// ...
]);
}
Finalmente, renderice la infolista en la vista del componente Livewire:
{{ $this->productInfolist }}
filament/infolists también incluye los siguientes paquetes:
filament/actionsfilament/schemasfilament/support
Estos paquetes le permiten utilizar sus componentes dentro de los componentes de Livewire.
Por ejemplo, si su infolista usa Acciones, recuerde implementar la interfaz HasActions y usar el rasgo InteractsWithActions en su clase de componente Livewire.
Si está utilizando otros [componentes de filamento] (descripción general#componentes del paquete) en su infolista, asegúrese de instalar e integrar también el paquete correspondiente.
Pasando datos a la infolista
Puede pasar datos a la infolista de dos maneras:
Pase una instancia del modelo Eloquent al método record() de la infolista, para asignar automáticamente todos los atributos y relaciones del modelo a las entradas en el esquema de la infolista:
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'),
// ...
]);
}
Alternativamente, puede pasar una matriz de datos al método state() de la infolista, para asignar manualmente los datos a las entradas en el esquema de la infolista:
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'),
// ...
]);
}