Skip to content

Pàgines ​

Una Page és una pantalla amb formulari però sense un model Eloquent darrere: una pàgina de configuració, el perfil de l'usuari... Per a qualsevol altra cosa, vegeu Pàgines personalitzades.

Una Page reutilitza exactament el mateix sistema de Camps que un Resource, però llegeix i desa les dades com vulguis, no hi ha cap Model obligatori:

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);
    }
}

Els tres mètodes abstractes:

MètodeDescripció
fields(): array<Section>Igual que a un Resource.
data(): arrayEls valors inicials del formulari. D'on vinguin és cosa teva: cache, un fitxer de configuració, una taula pròpia sense Eloquent...
save(array $data): voidEs crida amb les dades ja validades contra les rules() dels camps.

Igual que amb un Resource, slug() es dedueix del nom de la classe (SiteSettingsPage → site-settings) i es pot sobreescriure amb protected static ?string $slug. canView(): bool (per defecte true) en controla la visibilitat.

Un cop registrada al Panel via ->pages([SiteSettingsPage::class]), apareix a la navegació sense cap pas addicional.

Pàgina de perfil ​

Una Page es pot designar com a pàgina de perfil de l'usuari, i el panell li dedica un enllaç a 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);

Només es mostra l'enllaç als usuaris per als quals canView() és cert. Per decidir on aterra l'usuari en entrar al panell, vegeu home().

Com un Resource, una Page es pot situar a la navegació amb icon(), navigationGroup() i navigationSort(), tots tres opcionals i que retornen null per defecte. label() és el text de l'enllaç.