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:
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étodo | Descripción |
|---|---|
fields(): array<Section> | Igual que en un Resource. |
data(): array | Los 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): void | Se 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:
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);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().
Navegación
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.