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

Resolvery a predvyplnenie

Resolver určuje, ako sa hodnota poľa číta z requestu (toStorable) a späť z úložiska (fromStorage). Balík obsahuje DefaultResolver a MediaFileResolver. Implementujte RoundlyConsulting\Forms\Resolvers\Resolver — jeho konštruktor dostane Field — a namapujte ho na typ poľa v config/forms.php:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use RoundlyConsulting\Forms\Models\Field;
use RoundlyConsulting\Forms\Resolvers\Resolver;

class CheckboxResolver implements Resolver
{
    public function __construct(private Field $field) {}

    public function toStorable(Request $request, ?Model $sender = null): array
    {
        return ['value' => $request->boolean($this->field->path())];
    }

    public function fromStorage(?Model $sender = null): mixed
    {
        return $this->field->submissions()
            ->where('field_id', $this->field->getKey())
            ->value('value')['value'] ?? null;
    }
}
// config/forms.php
'fields' => [
    'default' => \RoundlyConsulting\Forms\Resolvers\DefaultResolver::class,
    'checkbox' => \App\Forms\CheckboxResolver::class,
],

Hodnotu vracajte zabalenú ako ['value' => …] — presne tento tvar rozbaľuje typedValue() aj čítač odpovedí. Typ bez vlastného mapovania použije fields.default; ak chýba aj ten, vyhodí sa UnresolvableFieldException.

Resolvery, ktoré potrebujú uložený riadok

Resolver, ktorý pred uložením hodnoty potrebuje existujúci riadok odpovede, navyše implementuje AttachesToSubmission — jeho attach() beží po vytvorení riadku v tej istej transakcii a restoreUpload() vráti dočasnú kópiu uloženého súboru (alebo null), aby ho finalizácia konceptu mohla zvalidovať podľa pravidiel poľa. Referenčnou implementáciou je MediaFileResolver:

// RoundlyConsulting\Forms\Resolvers\AttachesToSubmission
public function attach(Submission $submission, Request $request, ?Model $sender = null): void;

// A temporary copy of the stored file (or null), so finalizing a draft can validate it
// against the field's rules — the caller deletes the copy once validation has run.
public function restoreUpload(Submission $submission): ?UploadedFile;

// How MediaFileResolver implements attach() — the row exists, so it can own media:
public function attach(Submission $submission, Request $request, ?Model $sender = null): void
{
    $file = $request->file($this->field->path());

    if (! $file instanceof UploadedFile) {
        return;
    }

    $media = $submission->addMedia($file)->toBucket($submission->attachmentBucket());

    $submission->update(['value' => ['value' => $media->uuid]]);
}

Predvyplnenie (autofill)

Nastavte autofill poľa na triedu implementujúcu RoundlyConsulting\Forms\Autofill\Autofill a predvolenú hodnotu vypočítate za behu:

use RoundlyConsulting\Forms\Autofill\Autofill;
use RoundlyConsulting\Forms\Models\Field;

class CurrentUserEmail implements Autofill
{
    public function fill(Field $field): mixed
    {
        return auth()->user()?->email;
    }
}

// $field->getAutofillValue() resolves the class and returns its fill() result,
// or the raw `autofill` string when it isn't an Autofill class — such a class is never built.
$g->field('email', 'Email')->email()->autofill(CurrentUserEmail::class);

$field->getAutofillValue(); // '[email protected]' for the signed-in user

Triedy Autofill sa resolvujú cez kontajner, takže funguje injektovanie závislostí v konštruktore. Stĺpec autofill sú dáta: trieda, ktorá nie je Autofill, sa nikdy nevytvorí — vráti sa jej reťazec bez zmeny. FieldResource sprístupní vypočítanú hodnotu vášmu frontendu.

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.