Skip to content

Páginas ​

Una Page es una pantalla con formulario pero sin un modelo Eloquent detrás: una página de configuración, el perfil del usuario... Para cualquier otra cosa, véase Páginas personalizadas.

Una Page reutiliza exactamente el mismo sistema de Campos que un Resource, pero lee y guarda los datos como quieras, no hay ningún Model obligatorio:

php
final class SiteSettingsPage extends Page
{
    public function fields(): array
    {
        return [
            Section::make('Site Settings')
                ->schema([
                    Text::make('site_name')->rules('required', 'string', 'max:255'),
                    Toggle::make('maintenance_mode')->default(false),
                ]),
        ];
    }

    public function data(): array
    {
        return Cache::get('site_settings', [
            'site_name' => 'Arrel Workbench',
            'maintenance_mode' => false,
        ]);
    }

    public function save(array $data): void
    {
        Cache::forever('site_settings', $data);
    }
}

Los tres métodos abstractos:

MétodoDescripción
fields(): array<Section>Igual que en un Resource.
data(): arrayLos valores iniciales del formulario. De dónde vengan es cosa tuya: caché, un archivo de configuración, una tabla propia sin Eloquent...
save(array $data): voidSe llama con los datos ya validados contra las rules() de los campos.

Igual que con un Resource, slug() se deduce del nombre de la clase (SiteSettingsPage → site-settings) y se puede sobrescribir con protected static ?string $slug. canView(): bool (por defecto true) controla su visibilidad.

Una vez registrada en el Panel vía ->pages([SiteSettingsPage::class]), aparece en la navegación sin ningún paso adicional.

Página de perfil ​

Una Page se puede designar como página de perfil del usuario, y el panel le dedica un enlace en la barra lateral:

php
final class AccountPage extends Page
{
    public function fields(): array
    {
        return [
            Section::make()->schema([
                Text::make('name')->rules('required', 'string', 'max:255'),
            ]),
        ];
    }

    public function data(): array
    {
        return ['name' => (string) auth()->user()?->name];
    }

    public function save(array $data): void
    {
        auth()->user()?->forceFill(['name' => $data['name']])->save();
    }
}
php
Panel::make('admin')->profile(AccountPage::class);

Solo se muestra el enlace a los usuarios para los que canView() es cierto. Para decidir dónde aterriza el usuario al entrar en el panel, véase home().

Como un Resource, una Page se puede situar en la navegación con icon(), navigationGroup() y navigationSort(), los tres opcionales y que devuelven null por defecto. label() es el texto del enlace.