Ricerca…
introduzione
Invece di definire tutta la logica di gestione delle richieste come Chiusure nei file di percorso, è possibile che si desideri organizzare questo comportamento utilizzando le classi Controller. I controllori possono raggruppare la logica di gestione delle richieste correlate in una singola classe. I controller sono memorizzati nella directory app/Http/Controllers
per impostazione predefinita.
Controller di base
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function show($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
È possibile definire un percorso per questa azione del controller in questo modo:
Route::get('user/{id}', 'UserController@show');
Ora, quando una richiesta corrisponde all'URI del percorso specificato, verrà eseguito il metodo show
sulla classe UserController
. Naturalmente, i parametri del percorso verranno anche passati al metodo.
Controller Middleware
Il middleware può essere assegnato alle rotte del controller nei file di percorso:
Route::get('profile', 'UserController@show')->middleware('auth');
Tuttavia, è più conveniente specificare il middleware all'interno del costruttore del controller. Utilizzando il metodo middleware dal costruttore del controller, è possibile assegnare facilmente il middleware all'azione del controller.
class UserController extends Controller
{
/**
* Instantiate a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('log')->only('index');
$this->middleware('subscribed')->except('store');
}
}
Controller di risorse
Il routing delle risorse di Laravel assegna le rotte "CRUD" tipiche a un controller con una singola riga di codice. Ad esempio, potresti voler creare un controller che gestisca tutte le richieste HTTP per "foto" memorizzate dalla tua applicazione. Usando il comando make:controller
Artisan, possiamo creare rapidamente un controller di questo tipo:
php artisan make:controller PhotoController --resource
Questo comando genererà un controller su app/Http/Controllers/PhotoController.php
. Il controller conterrà un metodo per ciascuna delle operazioni di risorse disponibili.
Esempio di aspetto di un controller di risorse
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
L'esempio del controller risorse condivide il nome del metodo di quelli nella tabella seguente.
Successivamente, è possibile registrare un percorso pieno di risorse per il controller:
Route::resource('photos', 'PhotoController');
Questa dichiarazione di percorso singolo crea più percorsi per gestire una varietà di azioni sulla risorsa. Il controllore generato avrà già metodi stubati per ciascuna di queste azioni, incluse le note che ti informano dei verbi HTTP e degli URI che gestiscono.
Azioni gestite dal controllore delle risorse
Verbo | URI | Azione | Nome del percorso |
---|---|---|---|
OTTENERE | /photos | indice | photos.index |
OTTENERE | /photos/create | creare | photos.create |
INVIARE | /photos | memorizzare | photos.store |
OTTENERE | /photos/{photo} | mostrare | photos.show |
OTTENERE | /photos/{photo}/edit | modificare | photos.edit |
PUT / PATCH | /photos/{photo} | aggiornare | photos.update |
ELIMINA | /photos/{photo} | distruggere | photos.destroy |