Compendio – Laravel
4 minuti
18/11/2022
Tempo di lettura: 6 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-blockadatta 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
signedRoutecon il middlewaresigned. wasRecentlyCreatedsi può usare come controllo su un’istanza di un model per controllare se è appena stata creata dopo unfirstOrCreateoppureupdateOrCreate.- 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,
oddsserve a eseguire funzioni con una determinata probabilità. - Si può conservare lo stato
checkeddegli 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
AppServiceProvidersi posso definire le macro. Ad esempio si può impostareLang::handleMissingKeysUsingper notificare le traduzioni mancanti. - Per fare
truncatedi una tabella con chiavi esterne, bisogna prima faredisableForeignKeyConstraints(), effettuare l’operazione e poienableForeignKeyConstraints(). CarbonPeriodpermette 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'])). - L’helper
fluent($array)trasforma un array in un oggetto, permettendo di accedere ai suoi valori con la dot notation ($object->key) anziché come array. - Le colonne json dal database possono essere automaticamente trasformate in oggetti fluent assegnandogli la classe
AsCastnell’array$castsdel model. - La facade Http ha il metodo
retryper gestire programmaticamente le chiamate fallite. - L’helper
data_get('*.a.b')permette di accedere alle informazioni di array multidimensionali con strutture complesse restituendo null invece di fatal error in caso di chiavi mancanti. - Nelle classi Factory, dentro definition, oggi attributo può essere impostato con una callback che accetta l’argomento
$attributes, che contiene lo stato degli altri attributi. - Nei test, si possono monitorare le chiamate http reali utilizzando
Http::record()eHttp::recorder()invece di Http::fake(). - Anche le collection hanno il metodo
when(condition, callback, fallback). getChanges()dopo un update su un model ritorna solo i dati che sono stati cambiati.app(‘livewire’)->isLivewireRequest().- Impostando
Lang::handleMissingKeysUsingnel AppServiceProvider, si possono creare dei log quando Laravel prova a recuperare traduzioni mancanti. filter_var($var, $filter) è una funzione PHP utile a validare e sanificare il contenuto di una variabile. I filtri disponibili si ottengono confilter_list().