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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow