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 :
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éthode | Description |
|---|---|
fields(): array<Section> | Comme sur un Resource. |
data(): array | Les valeurs initiales du formulaire. D'où elles viennent, c'est à vous de voir : cache, fichier de configuration, table propre sans Eloquent... |
save(array $data): void | Appelé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 :
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();
}
}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().
Navigation
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.