Buscar..
Introducción
En lugar de definir toda la lógica de manejo de su solicitud como cierres en archivos de ruta, es posible que desee organizar este comportamiento usando clases de controlador. Los controladores pueden agrupar la lógica de manejo de solicitudes relacionadas en una sola clase. Los controladores se almacenan en el directorio app/Http/Controllers
de forma predeterminada.
Controladores básicos
<?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)]);
}
}
Puede definir una ruta a esta acción del controlador así:
Route::get('user/{id}', 'UserController@show');
Ahora, cuando una solicitud coincide con el URI de la ruta especificada, se ejecutará el método show
en la clase UserController
. Por supuesto, los parámetros de la ruta también se pasarán al método.
Controlador Middleware
Middleware puede asignarse a las rutas del controlador en sus archivos de ruta:
Route::get('profile', 'UserController@show')->middleware('auth');
Sin embargo, es más conveniente especificar middleware dentro del constructor de su controlador. Usando el método de middleware del constructor de su controlador, puede asignar fácilmente el middleware a la acción del controlador.
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');
}
}
Controlador de recursos
El enrutamiento de recursos de Laravel asigna las rutas "CRUD" típicas a un controlador con una sola línea de código. Por ejemplo, es posible que desee crear un controlador que maneje todas las solicitudes HTTP de "fotos" almacenadas por su aplicación. Con el comando make:controller
Artisan, podemos crear rápidamente dicho controlador:
php artisan make:controller PhotoController --resource
Este comando generará un controlador en app/Http/Controllers/PhotoController.php
. El controlador contendrá un método para cada una de las operaciones de recursos disponibles.
Ejemplo de cómo se ve un Controlador de Recursos
<?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)
{
//
}
}
El ejemplo del controlador de recursos comparte el nombre del método de aquellos en la tabla a continuación.
A continuación, puede registrar una ruta con recursos para el controlador:
Route::resource('photos', 'PhotoController');
Esta declaración de ruta única crea múltiples rutas para manejar una variedad de acciones en el recurso. El controlador generado ya tendrá métodos de apéndice para cada una de estas acciones, incluidas las notas que le informarán sobre los verbos HTTP y los URI que manejan.
Acciones manejadas por el controlador de recursos
Verbo | URI | Acción | Nombre de la ruta |
---|---|---|---|
OBTENER | /photos | índice | fotos.index |
OBTENER | /photos/create | crear | fotos.crear |
ENVIAR | /photos | almacenar | fotos.tienda |
OBTENER | /photos/{photo} | espectáculo | fotos.muestra |
OBTENER | /photos/{photo}/edit | editar | fotos.editar |
PUT / PATCH | /photos/{photo} | actualizar | photos.update |
BORRAR | /photos/{photo} | destruir | fotos.destroy |