Zoeken…
Invoering
In plaats van al uw logica voor verzoekafhandeling te definiëren als Sluitingen in routebestanden, wilt u dit gedrag misschien organiseren met behulp van Controller-klassen. Controllers kunnen gerelateerde logica voor verzoekafhandeling in één klasse groeperen. Controllers worden standaard opgeslagen in de app/Http/Controllers
directory.
Basiscontrollers
<?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)]);
}
}
U kunt als volgt een route naar deze controlleractie definiëren:
Route::get('user/{id}', 'UserController@show');
Nu, als een verzoek overeenkomt met de opgegeven route URI, de show
methode op UserController
klasse zal worden uitgevoerd. Natuurlijk worden de routeparameters ook aan de methode doorgegeven.
Controller Middleware
Middleware kan worden toegewezen aan de routes van de controller in uw routebestanden:
Route::get('profile', 'UserController@show')->middleware('auth');
Het is echter handiger om middleware op te geven in de constructor van uw controller. Met de middleware-methode van de constructor van uw controller kunt u eenvoudig middleware toewijzen aan de actie van de 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');
}
}
Broncontroller
Laravel resource routing wijst de typische "CRUD" -routes toe aan een controller met een enkele coderegel. U wilt bijvoorbeeld een controller maken die alle HTTP-aanvragen voor "foto's" verwerkt die door uw toepassing zijn opgeslagen. Met de opdracht make:controller
Artisan kunnen we snel een dergelijke controller maken:
php artisan make:controller PhotoController --resource
Met deze opdracht wordt een controller gegenereerd op app/Http/Controllers/PhotoController.php
. De controller bevat een methode voor elk van de beschikbare bronbewerkingen.
Voorbeeld van hoe een Resource Controller eruit ziet
<?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)
{
//
}
}
Het voorbeeld van de resourcecontroller deelt de methode naam van die in de onderstaande tabel.
Vervolgens kunt u een vindingrijke route naar de controller registreren:
Route::resource('photos', 'PhotoController');
Deze enkele routeaangifte maakt meerdere routes om verschillende acties op de resource af te handelen. De gegenereerde controller heeft al methoden voor elk van deze acties, inclusief opmerkingen die u informeren over de HTTP-werkwoorden en URI's die ze verwerken.
Acties afgehandeld door Resource Controller
Werkwoord | URI | Actie | Routenaam |
---|---|---|---|
KRIJGEN | /photos | inhoudsopgave | photos.index |
KRIJGEN | /photos/create | creëren | photos.create |
POST | /photos | op te slaan | photos.store |
KRIJGEN | /photos/{photo} | tonen | photos.show |
KRIJGEN | /photos/{photo}/edit | Bewerk | photos.edit |
PUT / PATCH | /photos/{photo} | bijwerken | photos.update |
DELETE | /photos/{photo} | vernietigen | photos.destroy |