Deklaratívne formuláre
Definujte formuláre v config('forms.definitions') a synchronizujte ich do databázy — chýbajúce sa vytvoria, zmenené aktualizujú, a to idempotentne:
// config/forms.php
'definitions' => [
[
'key' => 'contact',
'name' => 'Contact',
'is_public' => true,
'groups' => [
['key' => 'details', 'name' => 'Details', 'fields' => [
['key' => 'name', 'name' => 'Name', 'rules' => ['required']],
]],
],
],
],php artisan forms:syncExistujúce formuláre (párované podľa kľúča) prejdú tou istou porovnávacou úpravou ako Forms::update(), takže opakované spustenie zmení len to, čo sa zmenilo, a nikdy nič nezmaže.
Kľúče definície
| Úroveň | Kľúče |
|---|---|
| Formulár | key, name, is_public (alebo isPublic), expires_at (alebo expiresAt — reťazec dátumu, Unix timestamp, dátumový objekt, alebo null či prázdna hodnota bez expirácie), groups |
| Skupina | key, name, order (predvolene jej pozícia; explicitná 0 sa zachová), fields |
| Pole | key, name, type (predvolene text), help, autofill, options, rules (alebo validations), order (predvolene jeho pozícia; explicitná 0 sa zachová), conditions, messages |
Úplnejšia definícia s typmi, hláškami, možnosťami a podmienkou:
[
'key' => 'job-application',
'name' => 'Job application',
'is_public' => true,
'expires_at' => '2031-01-01 00:00:00', // or a Unix timestamp, or a date object
'groups' => [
[
'key' => 'applicant',
'name' => 'Applicant',
'fields' => [
['key' => 'name', 'name' => 'Full name', 'rules' => ['required', 'string']],
[
'key' => 'email',
'name' => 'Email',
'type' => 'email',
'rules' => ['required', 'email'],
'messages' => ['required' => 'We need an email to reply to you.'],
],
[
'key' => 'role',
'name' => 'Role',
'type' => 'select',
'options' => ['dev' => 'Developer', 'pm' => 'Product manager'],
],
[
'key' => 'portfolio',
'name' => 'Portfolio URL',
'help' => 'Only for developer roles',
'conditions' => [['field' => 'role', 'operator' => '=', 'value' => 'dev']],
],
],
],
],
],Z kódu
Forms::sync($definitions) vykoná tú istú logiku s explicitným zoznamom definícií; Forms::create() prijíma jednu FormDefinitionData. Hodnota expires_at v definícii môže byť reťazec dátumu ('2031-01-01 00:00:00'), Unix timestamp alebo dátumový objekt; order skupiny či poľa je predvolene jeho pozícia a explicitná 0 sa zachová:
use RoundlyConsulting\Forms\DataTransferObjects\FormDefinitionData;
// Same logic with an explicit definition list — returns the synced keys.
$keys = Forms::sync([
['key' => 'feedback', 'name' => 'Feedback', 'groups' => []],
]); // ['feedback']
// Or build a single definition from an array and create it.
$form = Forms::create(FormDefinitionData::fromArray([
'key' => 'newsletter',
'name' => 'Newsletter',
'groups' => [
['key' => 'main', 'name' => 'Main', 'fields' => [
['key' => 'email', 'name' => 'Email', 'type' => 'email', 'rules' => ['required', 'email']],
]],
],
]));Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.