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
strtoupper
reject
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
<?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'
];
}