Compendio – Laravel
3 minuti
18/11/2022
Tempo di lettura: 5 min.
Questo compendio ha la funzione di contenitore per tutte le note, memo e brevi consigli che mi capiterà di raccogliere durante lo sviluppo dei miei progetti.
L'immagine di copertina non c'entra niente con il contenuto.
- Stampare variabili php nelle stringhe “{$var}”
inline-block
adatta la larghezza dell’elemento al contenuto.foreach(range(min,max) as $i)
permette di effettuare un ciclo senza usare oggetti.- Si può usare
implode()
su una collezione per creare una stringa. optional(espressione)->metodo()
eseguemetodo()
solo se l’espressione non è null.- array_merge può essere sostituito da
$array+['val1','val2']
. - Per estrarre il primo errore di validazione tra gli attributi di un array:
$errors->first('array.*')
. - Solitamente, i dati ottenuti tramite dalle API vengono trasformati prima con
toJson()
e poi concollect()
. - Per aggiornare contemporaneamente più record si può usare
upsert
. Risulta utile soprattutto quando si lavora con i file excel. View::share('key', 'value')
, utilizzato nel metodo boot di AppServiceProvider, permette di condividere variabili con tutte le views dell’applicazione. Se le informazioni provengono dal db, conviene salvarle in cache (cache()->remember(key,ttl,value)
).- Per intercettare LazyLoading anche in produzione, aggiungere al metodo boot dell’ AppServiceProvider la funzione handleLazyLoadingViolationUsing.
- Rule::unique() può essere estesa con where().
- Si può ottenere la query in SQL dal querybuilder usando
->toSql()
o->toRawSql()
(che include i parametri) invece di->get()
.
Se ci sono più query o servono più dettagli si può usareDB::enableQueryLog()
+DB::getQueryLog()/getRawQueryLog()
. - Per creare URL temporanei (come quelli per le email di invito), si può usare
signedRoute
con il middlewaresigned
. wasRecentlyCreated
si può usare come controllo su un’istanza di un model per controllare se è appena stata creata dopo unfirstOrCreate
oppureupdateOrCreate
.- Si possono utilizzare componenti predefiniti (Console Components) per creare comandi personalizzati.
- I metodi e le proprietà degli oggetti possono essere resi dinamici usando variabili al posto dei nomi (
$oggetto->$property / $oggetto->$method
). - Le migration possono essere testate con
php artisan migrate --pretend
. - Le migration possono essere eseguite un passo alla volta con
php artisan migrate --step
. - Tra i vari helper,
odds
serve a eseguire funzioni con una determinata probabilità. - Si può conservare lo stato
checked
degli input in caso di errori di validazione con la sintassi@checked(in_array($value, old('array_name', [])))
. - Si può cambiare il valore di un parametro di configurazione in runtime con
config('chiave' => 'valore')
. - Si possono passare i parametri alle funzioni tramite nome anzichè posizione con
nome: val
. - Per forzare il ritorno in formato JSON, senza costringere il client a usare header specifici nella richiesta, si può creare un middleware che aggiunge
$request->headers('Accept','application/json')
. - Nelle Form Request, per adattare i nomi delle variabili nel caso siano diversi tra frontend e backend, si può utilizzare il metodo
prepareForValidation
. - In
AppServiceProvider
si posso definire le macro. Ad esempio si può impostareLang::handleMissingKeysUsing
per notificare le traduzioni mancanti. - Per fare
truncate
di una tabella con chiavi esterne, bisogna prima faredisableForeignKeyConstraints()
, effettuare l’operazione e poienableForeignKeyConstraints()
. CarbonPeriod
permette di creare tabelle di date.- Si possono creare subquery concatenando alle query il metodo
addSelect()
. - “?:” si chiama Elvis Operator e ritorna il primo operando se è un valore true, altrimenti ritorna il secondo. Il Null Coalescing Operator “??” si comporta allo stesso modo il valore null.
- Aggiungendo
withDefault()
alla fine di una relationship, si può restituire un’istanza di default quando una relazione é null. - Per aggiungere dinamicamente condizioni where al query builder, si può utilizzare un unico metodo where a cui passare come argomento un array con i nomi delle colonne come chiavi (es.
where(['colonna1' => '123', 'colonna2' => 'abc'])
)