classe59 / 02-imdb

0 stars 0 forks source link

Creazione MovieController #5

Open DonnieRich opened 2 years ago

DonnieRich commented 2 years ago

Creazione di un controller di tipo resource: php artisan make:controller MovieController --resource

All'interno dei metodi del controller troviamo alcuni riferimenti interessanti:

DonnieRich commented 2 years ago

Notare che questa issue non ha dipendenze collegate, perché non è necessario avere migration, model e seeder per realizzare la base del controller.

Ovviamente questi passaggi diventano indispensabili nel momento in cui vogliamo scrivere il codice dei vari metodi e poterlo testare.

DonnieRich commented 2 years ago

I vari metodi del controller CRUD vengono interrogati visitando (o chiamando) le rotte corrispondenti. Possiamo realizzare questo collegamento in modo manuale (andando a scrivere la rotta all'interno del file web.php oppure usando il metodo ::resource()).

Ogni rotta si appoggia su una combinazione di verbi (HTTP verbs - GET, POST, PUT (o PATCH) e DELETE), metodi presenti nel controller (index, show, create, store, edit, update, delete) e struttura dell'URI (/movies, /movies/{movie}, /movies/{movie}/edit)

Per ottenere le informazioni relative alle singole rotte create tramite il metodo ::resource() possiamo fare riferimento al comando php artisan route:list che ci restituirà la lista delle rotte con relativo URI, nome, metodo del controller e middleware relativo (es. web oppure api)

Quando usare POST, PUT, PATCH?

Dipende da cosa dobbiamo ottenere.

Usiamo il verbo POST quando vogliamo inserire un nuovo elemento (una nuova entità) all'interno del nostro DB. POST

Usiamo il verbo PUT quando vogliamo modificare (o rimpiazzare) la rappresentazione di una data entità.

The difference between PUT and POST is that PUT is idempotent: calling it once or several times successively has the same effect (that is no side effect), where successive identical POST may have additional effects, like passing an order several times.

PUT

Usiamo il verbo PATCH se vogliamo applicare modifiche solo ad alcune parti di una entità.

A PATCH request is considered a set of instructions on how to modify a resource. Contrast this with PUT; which is a complete representation of a resource.

PATCH

Questi 3 metodi (o HTTP verbs - verbi), insieme anche ad altri, sono propri del protocollo HTTP e non di Laravel.

DonnieRich commented 2 years ago

Spesso possiamo trovarci ad utilizzare il metodo abort() (che fa parte delle funzioni di utilità - oppure helper - di Laravel).

Cosa fa questo metodo? Ci permette di lanciare un'eccezione HTTP (es. errore 404) che sarà poi gestita da Laravel mostrando all'utente una pagina adeguata. Usare questo metodo è utile per comunicare in modo chiaro agli utenti il tipo di errore o eccezione a cui sono andati incontro.

Esempio

Se un utente ricerca un prodotto/film/post che non esiste nel nostro sistema, utilizzando il metodo abort(404) nel metodo show() del nostro controller faremo in modo di indirizzarlo verso la pagina di errore adeguata.

abort()

DonnieRich commented 2 years ago

Quando ci troviamo a gestire una relazione many-to-many possiamo sfruttare i metodi messi a disposizione da Laravel:

Lo scopo di questi metodi è semplificare l'inserimento (o la modifica) dei dati relativi alle relazioni many-to-many