laravel-compendium

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.

  1. Stampare variabili php nelle stringhe “{$var}”
  2. inline-block adatta la larghezza dell’elemento al contenuto.
  3. foreach(range(min,max) as $i) permette di effettuare un ciclo senza usare oggetti.
  4. Si può usare implode() su una collezione per creare una stringa.
  5. optional(espressione)->metodo() esegue metodo() solo se l’espressione non è null.
  6. array_merge può essere sostituito da $array+['val1','val2'].
  7. Per estrarre il primo errore di validazione tra gli attributi di un array: $errors->first('array.*').
  8. Solitamente, i dati ottenuti tramite dalle API vengono trasformati prima con toJson() e poi con collect().
  9. Per aggiornare contemporaneamente più record si può usare upsert. Risulta utile soprattutto quando si lavora con i file excel.
  10. 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)).
  11. Per intercettare LazyLoading anche in produzione, aggiungere al metodo boot dell’ AppServiceProvider la funzione handleLazyLoadingViolationUsing.
  12. Rule::unique() può essere estesa con where().
  13. 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ò usare DB::enableQueryLog() + DB::getQueryLog()/getRawQueryLog().
  14. Per creare URL temporanei (come quelli per le email di invito), si può usare signedRoute con il middleware signed.
  15. wasRecentlyCreated si può usare come controllo su un’istanza di un model per controllare se è appena stata creata dopo un firstOrCreate oppure updateOrCreate.
  16. Si possono utilizzare componenti predefiniti (Console Components) per creare comandi personalizzati.
  17. I metodi e le proprietà degli oggetti possono essere resi dinamici usando variabili al posto dei nomi ($oggetto->$property / $oggetto->$method).
  18. Le migration possono essere testate con php artisan migrate --pretend.
  19. Le migration possono essere eseguite un passo alla volta con php artisan migrate --step.
  20. Tra i vari helper, odds serve a eseguire funzioni con una determinata probabilità.
  21. Si può conservare lo stato checked degli input in caso di errori di validazione con la sintassi @checked(in_array($value, old('array_name', []))).
  22. Si può cambiare il valore di un parametro di configurazione in runtime con config('chiave' => 'valore').
  23. Si possono passare i parametri alle funzioni tramite nome anzichè posizione con nome: val.
  24. 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').
  25. Nelle Form Request, per adattare i nomi delle variabili nel caso siano diversi tra frontend e backend, si può utilizzare il metodo prepareForValidation.
  26. In AppServiceProvider si posso definire le macro. Ad esempio si può impostare Lang::handleMissingKeysUsing per notificare le traduzioni mancanti.
  27. Per fare truncate di una tabella con chiavi esterne, bisogna prima fare disableForeignKeyConstraints(), effettuare l’operazione e poi enableForeignKeyConstraints().
  28. CarbonPeriod permette di creare tabelle di date.
  29. Si possono creare subquery concatenando alle query il metodo addSelect().
  30. “?:” 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.
  31. Aggiungendo withDefault() alla fine di una relationship, si può restituire un’istanza di default quando una relazione é null.
  32. 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']) ).
  33. 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.
  34. Le colonne json dal database possono essere automaticamente trasformate in oggetti fluent assegnandogli la classe AsCast nell’array $casts del model.
  35. La facade Http ha il metodo retry per gestire programmaticamente le chiamate fallite.
  36. 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.
  37. 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.
  38. Nei test, si possono monitorare le chiamate http reali utilizzando Http::record() e Http::recorder() invece di Http::fake().
  39. Anche le collection hanno il metodo when(condition, callback, fallback).
  40. getChanges() dopo un update su un model ritorna solo i dati che sono stati cambiati.
  41. app(‘livewire’)->isLivewireRequest().
  42. Impostando Lang::handleMissingKeysUsing nel AppServiceProvider, si possono creare dei log quando Laravel prova a recuperare traduzioni mancanti.
  43. filter_var($var, $filter) è una funzione PHP utile a validare e sanificare il contenuto di una variabile. I filtri disponibili si ottengono con filter_list().