NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Forms for Laravel

Konfigurácia

Publikovaný config/forms.php umožňuje vymeniť modely balíka, zaregistrovať resolvery polí, mapovať typy polí na typy hodnôt a doladiť nahrávanie súborov a schvaľovanie. Celý súbor:

return [
    // Override any model with your own subclass.
    'models' => [
        'form' => \RoundlyConsulting\Forms\Models\Form::class,
        'group' => \RoundlyConsulting\Forms\Models\Group::class,
        'field' => \RoundlyConsulting\Forms\Models\Field::class,
        'submission' => \RoundlyConsulting\Forms\Models\Submission::class,
        'form_submission' => \RoundlyConsulting\Forms\Models\FormSubmission::class,
    ],

    // Key type of the polymorphic sender columns: "bigint", "uuid" or "ulid" — anything else throws.
    'key_type' => env('FORMS_KEY_TYPE', 'bigint'),

    // Map a field `type` to the resolver that reads/writes its value.
    // `default` is used for any type without an explicit mapping. Each value must be
    // a class implementing Resolver; anything else throws.
    'fields' => [
        'default' => \RoundlyConsulting\Forms\Resolvers\DefaultResolver::class,
        'file' => \RoundlyConsulting\Forms\Resolvers\MediaFileResolver::class,
        'image' => \RoundlyConsulting\Forms\Resolvers\MediaFileResolver::class,
    ],

    // Map a field `type` to the attributes AttributeType used to cast stored
    // values and type-check submissions. Unlisted types (e.g. `time`) read back
    // exactly as stored. A value that isn't an AttributeType case throws.
    'field_types' => [
        'number' => 'integer',   // whole numbers; `decimal` / `float` map to 'float'
        'range' => 'integer',
        'float' => 'float',
        'decimal' => 'float',
        'checkbox' => 'boolean',
        'boolean' => 'boolean',
        'toggle' => 'boolean',
        'date' => 'datetime',
        'datetime' => 'datetime',
        'multiselect' => 'array',
        'checkboxes' => 'array',
        'tags' => 'array',
    ],

    // Media settings for file/image fields (backed by media-library-for-laravel).
    'media' => [
        'bucket' => 'attachment',
        'visibility' => 'private',
        'disk' => env('FORMS_MEDIA_DISK'),
        'private_disk' => env('FORMS_MEDIA_PRIVATE_DISK', 'local'),
        'accepted_mime_types' => null,
        'max_file_size' => null,
        'responsive_widths' => null,
        'temporary_url_lifetime' => null,
    ],

    // Submission review via approvals-for-laravel. Disabled by default.
    'approvals' => [
        'enabled' => env('FORMS_APPROVALS_ENABLED', false),
    ],

    // Forms defined declaratively and synced to the DB with `php artisan forms:sync`.
    'definitions' => [],
];

Všetky kľúče

KľúčPredvolenéÚčel
models.formModels\FormModel formulárov (model balíka alebo jeho podtrieda; iná trieda vyhodí výnimku).
models.groupModels\GroupModel skupín.
models.fieldModels\FieldModel polí.
models.submissionModels\SubmissionModel riadkov odpovede (jeden na pole).
models.form_submissionModels\FormSubmissionAgregát, ktorý združuje riadky jednej odpovede (predmet schvaľovania).
key_typebigintTyp kľúča polymorfných stĺpcov odosielateľa: bigint, uuid alebo ulid (FORMS_KEY_TYPE); prázdna hodnota = nenastavené → bigint; iná hodnota vyhodí výnimku.
fields.defaultDefaultResolverResolver pre každý typ poľa bez vlastného mapovania. Každý záznam fields.* musí byť trieda Resolver; prázdny záznam sa považuje za nenamapovaný; čokoľvek iné vyhodí výnimku.
fields.file / fields.imageMediaFileResolverUloží nahratý súbor ako médium na riadku odpovede.
field_types12 mapovaníTyp poľa → AttributeType pre typované čítanie a validáciu. Typ time zámerne nie je namapovaný a vráti sa presne tak, ako je uložený. Nenamapovaný typ — aj typ namapovaný na prázdnu hodnotu — sa číta ako reťazec; namapovaná hodnota, ktorá nie je AttributeType (integr), vyhodí výnimku.
media.bucketattachmentSkupina médií, do ktorej riadok odpovede ukladá súbory (reťazec; prázdna hodnota = nenastavené → attachment).
media.visibilityprivateprivate (podpísané streamovanie) alebo public; čokoľvek iné vyhodí výnimku.
media.disknullDisk pre všetky súbory (FORMS_MEDIA_DISK); null alebo prázdna hodnota = podľa viditeľnosti — súkromné → media.private_disk, verejné → predvolený disk media library.
media.private_disklocalNeverejný disk pre súkromné súbory a ich varianty, ak je media.disk null (FORMS_MEDIA_PRIVATE_DISK).
media.accepted_mime_typesnullObmedzenie povolených mime typov na zoznam neprázdnych reťazcov (null alebo [] = bez obmedzenia).
media.max_file_sizenullMaximálna veľkosť súboru v bajtoch, najmenej 1 (null = predvolené z médií).
media.responsive_widthsnullResponzívne šírky obrázkov, kladné celé čísla (null = predvolený rebrík médií).
media.temporary_url_lifetimenullPlatnosť podpísanej URL v minútach, najmenej 1 (null = predvolené z médií).
approvals.enabledfalsePosielať odpovede na schvaľovanie (FORMS_APPROVALS_ENABLED). Číta sa striktne: true/1/on/yes alebo false/0/off/no; čokoľvek iné vyhodí výnimku.
definitions[]Deklaratívne definície formulárov pre forms:sync (každá položka je pole).

Prostredie (env)

Tri nastavenia sú riadené cez env, takže najčastejšie zmeny nevyžadujú publikovanú konfiguráciu:

FORMS_KEY_TYPE=bigint
FORMS_MEDIA_PRIVATE_DISK=s3-private   # a non-public disk for private uploads
# FORMS_MEDIA_DISK=                   # leave unset to choose the disk by visibility
FORMS_APPROVALS_ENABLED=true

Hodnotu key_type nastavte ešte pred migráciou: určuje typ polymorfných stĺpcov odosielateľa v tabuľkách submissions a form_submissions a všetky modely, ktoré používate ako odosielateľov, musia mať rovnaký typ kľúča. Prázdna hodnota (FORMS_KEY_TYPE=) sa považuje za nenastavenú a ponechá bigint; akákoľvek iná hodnota ako bigint, uuid alebo ulid vyhodí InvalidConfigurationException.

Striktné nastavenia

Kľúč bez hodnoty — chýba, je null alebo je prázdny ako riadok FORMS_MEDIA_DISK= v hostiteľskej aplikácii — použije svoju predvolenú hodnotu; voliteľný kľúč (media.disk, media.max_file_size, media.responsive_widths, media.temporary_url_lifetime) zostane nenastavený a prázdny záznam fields.* či field_types.* sa považuje za nenamapovaný. Každá nastavená hodnota musí sedieť, inak vyhodí RoundlyConsulting\PackageToolkit\Exceptions\InvalidConfigurationException s názvom kľúča:

  • Celé čísla prijímajú int alebo reťazec s celým číslom — každá hodnota z env je reťazec —, takže 10MB či 5.5 vyhodí výnimku, namiesto toho, aby sa ignorovala.
  • Názov skupiny médií či disku, ktorý nie je reťazec, vyhodí výnimku, rovnako ako preklep v media.visibility — ten sa už nečíta ako private.
  • Chybná položka zoznamu vyhodí výnimku — v accepted_mime_types, responsive_widths alebo položka definitions, ktorá nie je pole.
  • Každý záznam fields.* musí byť trieda Resolver a každá hodnota field_types prípad AttributeType.
  • FORMS_APPROVALS_ENABLED prijíma true/1/on/yes alebo false/0/off/no; čokoľvek iné vyhodí výnimku.

php artisan about chybné nastavenie zobrazí ako INVALID, namiesto toho, aby zlyhal.

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 kryptomien

Odoslaní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.