Migrazione Laravel 5.4 -> 5.5
Updated at: 24/02/2018
Riporto qui di seguito alcuni punti da seguire per migrare i nostri progetti da laravel 5.4 a 5.5 e in particolare da jsmPackage con oggetti in sessione a no-session-exist_obj
Innazitutto Laravel 5.5 necessita di php7+
Ovviamente ci sono molte eccezioni e differenze da valutare di volta in volta, ma i passi principali sono i seguenti:
- signature dei metodi: i metodi che estendono jsmController sono
cambiati, quindi vanno aggiornati di conseguenza. tendenzialmente sono
- init_form_fields -> deve avere il parametro $insert = false nella dichiarazione
- init_filter_list -> togliamo $request dalla dichiarazione
- index -> togliamo $request dalla dichiarazione
- store -> dovrebbe essere rimasto uguale
- update -> $id e $request hanno cambiato posizione, sono invertiti. Nella dichiarazione basta girarli però ATTENZIONE!
se il metodo update ad un certo punto chiama il metodo parent::update() anche nell'invocazione sono da girare i parametri! - create -> togliamo $request dalla dichiarazione
-
Tutti i metodi base (update, edit, etc...) che mettono in sessione existing_obj devono essere modificati per toglierlo. Questo è particolarmente delicato perché togliendolo dalla sessione va visto che nessuno a valle lo usi, in particolare le view che vengono chiamate dai metodi.
- tutti i metodi che hanno nella dichiarazione ($request = null)
vanno modificati togliendo il parametro e aggiungendo come prima riga:
$request = \Request();
Questo va fatto ovviamente solo se poi nel metodo il parametro $request
è effettivamente usato: siamo pieni di metodi che hanno $request nella
dichiarazione ma poi non è usato, in quel caso si può cancellare senza
problemi
- i metodi che hanno nella dichiarazione ($request) senza l'opzione
=null dovrebbero continuare a funzionare. Ovviamente anche qui se ci
accorgiamo che $request non è usato all'interno del metodo facciamo
pulizia.
- in generale, è meglio se prendiamo l'abitudine di non usare
$request nella dichiarazione di un metodo, a meno che sia strettamente
necessario. In tutti gli altri casi si può usare direttamente
\Request::input() oppure creare una variabile $request = \Request() da
usare in seguito.
- già che stiamo girando praticamente tutti i metodi, aggiungiamo l'invocazione alla documentazione laddove mancasse:
\jsmDoc::log_method(__FUNCTION__, get_called_class(), __FILE__);
Io di solito procedo dall'inizio del controller cercando tutte le
occorrenze di $request e valutando di volta in volta l'azione da
intraprendere sulla base di quanto scritto sopra (e nel caso aggiungendo
la documentazione).
Quindi riparto dall'inizio cercando "session" in modo da vedere se viene messo qualcosa di troppo in sessione.
Però ovviamente ciascuno può seguire il metodo che preferisce.