Saltar al contenido principal

Representación de una infolista en una vista Blade

aviso

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 }}
info

filament/infolists también incluye los siguientes paquetes:

  • filament/actions
    • filament/schemas
    • filament/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'),
// ...
]);
}