Lo scorso mercoledi è stata rilasciata la versione 5.7.13 del framework PHP Laravel, che ha portato con se alcune interessanti novità nella gestione delle collezioni ed ha aggiunto la possibilità di restituire un array di stringhe nelle regole di validazione personalizzate.
Le collezioni, in particolare, sono un componente di Laravel molto apprezzato dagli sviluppatori, perché permettono di lavorare con gli array di dati in una maniera fluida e performante, fungendo da wrapper consistente per questi ultimi. Nell'esempio seguente si può osservare questo componente in azione:
$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
return strtoupper($name);
})
->reject(function ($name) {
return empty($name);
});
L'helper collect
produce una nuova istanza di una collezione a partire da un array, viene richiamato il metodo strtoupper
su ogni singolo elemento della collezione ed infine vengono rimossi tutti gli elementi vuoti grazie al metodo reject
ed al callback che gli viene fornito (che in questo caso restituisce true per ogni elemento vuoto).
Nel primo contesto (namespace Illuminate\Support\Collection
) è stata introdotta la possibilità di controllare la mancata presenza di elementi in una collezione e gestirla attraverso i nuovi metodi whenEmpty
, whenNotEmpty
, unlessEmpty
e unlessNotEmpty
.
Nel seguente snippet, il metodo whenEmpty
della classe Collection
chiamerà dunque una funzione anonima che funge da callback in caso di collezione vuota:
<?php
use Illuminate\Support\Collection;
$collection = new Collection;
$collection->whenEmpty(function ($collection) {
return $collection->push('somevalue');
});
$this->assertSame(['somevalue'], $collection->toArray());
I metodi di Collection che utilizzano unless
come prefisso funzionano in maniera opposta: il callback verrà richiamato fino a quando la collezione non è vuota nel primo caso:
<?php
use Illuminate\Support\Collection;
$collection = new Collection;
$collection->unlessEmpty(function ($collection) {
return $collection->push('somevalue');
});
$this->assertSame([], $collection->toArray());
e al contrario nel secondo caso:
<?php
use Illuminate\Support\Collection;
$collection = new Collection;
$collection->unlessNotEmpty(function ($collection) {
return $collection->push('somevalue');
});
$this->assertSame([], $collection->toArray());
La seconda novità di punta di questa release riguarda la possibilità di aggiungere un array di messaggi per gestire le regole di validazione personalizzate/custom, che può essere direttamente restituito nella regola impostata da noi:
public function message()
{
return [
':attribute must be an e-mail',
':attribute must be a first name'
];
}