Podmíněné přidávání logiky do požadavků Laravel

Úvod Laravel 11.35.0 přináší výkonný doplněk k funkci Request třída - podpora pro when() prostřednictvím metody Conditionable vlastnost. Tato funkce, na které se podílel Ahmet İmr...

Poptat web

17. 12. 2024

Podmíněné přidávání logiky do požadavků Laravel

Úvod

Laravel 11.35.0 přináší výkonný doplněk k funkci Request třída - podpora pro when() prostřednictvím metody Conditionable vlastnost. Tato funkce, na které se podílel Ahmet İmrak, umožňuje vývojářům bezproblémově aplikovat podmíněnou logiku při práci s příchozími daty požadavků. Díky tomu je kód čistší, výraznější a sladěný s požadavky na Request s dalšími podmíněnými částmi ekosystému Laravel, jako je například nástroj Query Builder.

Problém

Dříve podmíněné zpracování příchozích dat požadavků často vyžadovalo slovní vyjádření. if příkazy nebo opakované inline kontroly. Například:

if ($this->input('account_id')) {
$this->merge(['account_name' => Account::getName($this->input('account_id'))]);
} else {
$this->merge(['account_name' => null]);
}
 
if ($this->input('contact_id')) {
$this->merge(['contact_name' => Contact::getName($this->input('contact_id'))]);
} else {
$this->merge(['contact_name' => null]);
}

Taková podmíněná logika je sice funkční, ale s rostoucím počtem podmínek se opakuje a hůře udržuje.

Řešení: when() Metoda

Ve verzi Laravel 11.35.0 je možnost Request třída nyní používá Conditionable rys, který umožňuje použití when() zefektivnit podmíněné operace. Zde je příklad, jak vypadá stejná logika s novou metodou:

protected function prepareForValidation(): void
{
$this->when($this->input('account_id'),
fn (Request $req, int $accountId) => $req->merge(['account_name' => Account::getName($accountId)]),
fn (Request $req) => $req->merge(['account_name' => null])
)->when($this->input('contact_id'),
fn (Request $req, int $contactId) => $req->merge(['contact_name' => Contact::getName($contactId)]),
fn (Request $req) => $req->merge(['contact_name' => null])
);
}

Jak to funguje

Na stránkách when() metoda použije zpětné volání, když daná podmínka nabývá pravdivé hodnoty. Kromě toho můžete předat "výchozí" zpětné volání pro případy, kdy je podmínka falešná.

Podpis metody:

public function when($value = null, ?callable $callback = null, ?callable $default = null);
  • $value: Podmínka, která se má vyhodnotit (např. vstupní hodnota požadavku).
  • $callback: Provede se, pokud je podmínka pravdivá.
  • $default: Provede se, pokud je podmínka chybná.

Klíčové výhody

  1. Kód čističe: Odstraňuje opakující se if a zjednodušuje podmíněnou logiku.
  2. Čitelnost: Kód se stává výraznějším a srozumitelnějším.
  3. Znovupoužitelnost: Zarovnání Request s dalšími podmíněnými komponentami, jako jsou Collections a Query Builder.

Příklad z reálného světa

Představte si, že připravujete data žádosti k validaci. Pomocí when() můžete stručně zpracovat více podmíněných příkazů:

Před:

if ($this->input('is_admin')) {
$this->merge(['role' => 'admin']);
} else {
$this->merge(['role' => 'user']);
}

Po (Laravel 11.35.0):

$this->when($this->input('is_admin'),
fn (Request $req) => $req->merge(['role' => 'admin']),
fn (Request $req) => $req->merge(['role' => 'user'])
);

Výsledkem je čistší a lépe udržovatelný kód.

Závěr

Přidání when() do metody Request v Laravelu 11.35.0 je pro vývojáře významným vylepšením. Díky příspěvku Ahmeta İmraka je nyní podmíněná logika při zpracování dat požadavků elegantnější, čitelnější a sladěná s plynulou a expresivní syntaxí Laravelu.

Chcete-li tuto funkci využít a zjednodušit logiku zpracování požadavků, aktualizujte na verzi Laravel 11.35.0.

Původní článek publikoval Nabil Hassen.