> ## Documentation Index
> Fetch the complete documentation index at: https://filament-34a8cf01.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Rendering a schema in a Blade view

> [!WARNING]
>
> You are currently viewing the documentation for Filament 4.x, which is a previous version of Filament.
>
> Looking for the current stable version? Visit the [5.x documentation](https://filament-34a8cf01.mintlify.site/5.x/components/schema.md).

> [!WARNING]
>
> Before proceeding, make sure `filament/schemas` is installed in your project. You can check by running:
>
> ```bash theme={"theme":"gruvbox-dark-hard"}
> composer show filament/schemas
> ```
>
> If it's not installed, consult the [installation guide](https://filament-34a8cf01.mintlify.site/4.x/introduction/installation.md#installing-the-individual-components) and configure the **individual components** according to the instructions.

## Setting up the Livewire component

First, generate a new Livewire component:

```bash theme={"theme":"gruvbox-dark-hard"}
php artisan make:livewire ViewProduct
```

Then, render your Livewire component on the page:

```blade theme={"theme":"gruvbox-dark-hard"}
@livewire('view-product')
```

Alternatively, you can use a full-page Livewire component:

```php theme={"theme":"gruvbox-dark-hard"}
use App\Livewire\ViewProduct;
use Illuminate\Support\Facades\Route;

Route::get('products/{product}', ViewProduct::class);
```

You must use the `InteractsWithSchemas` trait, and implement the `HasSchemas` interface on your Livewire component class:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Schemas\Concerns\InteractsWithSchemas;
use Filament\Schemas\Concerns\RestrictsFileUploadsToSchemaComponents;
use Filament\Schemas\Contracts\HasSchemas;
use Livewire\Component;

class ViewProduct extends Component implements HasSchemas
{
    use InteractsWithSchemas;
    use RestrictsFileUploadsToSchemaComponents;

    // ...
}
```

## Adding the schema

Next, add a method to the Livewire component which accepts a `$schema` object, modifies it, and returns it:

```php theme={"theme":"gruvbox-dark-hard"}
use Filament\Schemas\Schema;

public function productSchema(Schema $schema): Schema
{
    return $schema
        ->components([
            // ...
        ]);
}
```

Finally, render the schema in the Livewire component's view:

```blade theme={"theme":"gruvbox-dark-hard"}
{{ $this->productSchema }}
```

> [!NOTE]
>
> `filament/schemas` also includes the following packages:
>
> * `filament/actions`
> * `filament/support`
>
> These packages allow you to use their components within Livewire components.
> For example, if your schema uses [Actions](../actions), remember to implement the `HasActions` interface and use the `InteractsWithActions` trait on your Livewire component class.
>
> If you are using any other [Filament components](https://filament-34a8cf01.mintlify.site/4.x/components/overview.md#package-components) in your schema, make sure to install and integrate the corresponding package as well.

## Security considerations for file uploads

The `InteractsWithSchemas` trait exposes Livewire's file upload RPC methods on every component that uses it — whether or not the component's schema contains an upload field. If your Livewire component is reachable to users you do not want uploading arbitrary files, add the `RestrictsFileUploadsToSchemaComponents` trait. See [Restricting Livewire file uploads to schema components](https://filament-34a8cf01.mintlify.site/4.x/advanced/security.md#restricting-livewire-file-uploads-to-schema-components) for details.

[Edit this page on GitHub](https://github.com/filamentphp/filament/edit/4.x/docs/12-components/02-schema.md)

## Sponsored by

[Your logo here](https://github.com/sponsors/danharrin)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.