Skip to content

Pages ​

Une Page est un écran avec un formulaire mais sans modèle Eloquent derrière : une page de configuration, le profil de l'utilisateur... Pour tout le reste, voir Pages personnalisées.

Une Page réutilise exactement le même système de Champs qu'un Resource, mais lit et enregistre les données comme vous le souhaitez, il n'y a aucun Model obligatoire :

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

Les trois méthodes abstraites :

MéthodeDescription
fields(): array<Section>Comme sur un Resource.
data(): arrayLes valeurs initiales du formulaire. D'où elles viennent, c'est à vous de voir : cache, fichier de configuration, table propre sans Eloquent...
save(array $data): voidAppelée avec les données déjà validées par rapport aux rules() des champs.

Comme pour un Resource, slug() se déduit du nom de la classe (SiteSettingsPage → site-settings) et peut être remplacé avec protected static ?string $slug. canView(): bool (true par défaut) en contrôle la visibilité.

Une fois enregistrée sur le Panel via ->pages([SiteSettingsPage::class]), elle apparaît dans la navigation sans aucune étape supplémentaire.

Page de profil ​

Une Page peut être désignée comme page de profil de l'utilisateur, et le panneau lui consacre un lien dans la barre latérale :

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

Le lien n'est affiché qu'aux utilisateurs pour lesquels canView() est vrai. Pour décider où l'utilisateur atterrit en entrant dans le panneau, voir home().

Comme un Resource, une Page peut être placée dans la navigation avec icon(), navigationGroup() et navigationSort(), tous trois facultatifs et retournant null par défaut. label() est le texte du lien.