Laravel - Controladores
En el marco MVC, la letra 'C' significa Controlador. Actúa como un tráfico de dirección entre vistas y modelos. En este capítulo, aprenderá sobre los controladores en Laravel.
Crear un controlador
Abra el símbolo del sistema o el terminal según el sistema operativo que esté utilizando y escriba el siguiente comando para crear el controlador utilizando Artisan CLI (interfaz de línea de comandos).
php artisan make:controller <controller-name> --plain
Reemplace el <controller-name> con el nombre de su controlador. Esto creará un constructor simple a medida que pasamos el argumento:plain. Si no desea crear un constructor simple, simplemente puede ignorar el argumento. El constructor creado se puede ver enapp/Http/Controllers.
Verá que ya se ha realizado una codificación básica y puede agregar su codificación personalizada. El controlador creado se puede llamar desde route.php mediante la siguiente sintaxis.
Sintaxis
Route::get(‘base URI’,’[email protected]’);
Ejemplo
Step 1 - Ejecute el siguiente comando para crear UserController.
php artisan make:controller UserController --plain
Step 2 - Después de una ejecución exitosa, recibirá el siguiente resultado.
Step 3 - Puede ver el controlador creado en app/Http/Controller/UserController.php con una codificación básica ya escrita para usted y puede agregar su propia codificación según sus necesidades.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
//
}
Middleware del controlador
Hemos visto middleware antes y también se puede usar con el controlador. El middleware también se puede asignar a la ruta del controlador o dentro del constructor de su controlador. Puede utilizar el método de middleware para asignar middleware al controlador. El middleware registrado también se puede restringir a cierto método del controlador.
Asignación de middleware para enrutar
Route::get('profile', [
'middleware' => 'auth',
'uses' => '[email protected]'
]);
Aquí estamos asignando el middleware de autenticación a UserController en la ruta del perfil.
Asignar middleware dentro del constructor del controlador
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function __construct() {
$this->middleware('auth');
}
}
Aquí estamos asignando auth middleware utilizando el método de middleware en el UserController constructor.
Ejemplo
Step 1 - Agregue las siguientes líneas de código al app/Http/routes.php archivo y guárdelo.
routes.php
<?php
Route::get('/usercontroller/path',[
'middleware' => 'First',
'uses' => '[email protected]'
]);
Step 2 - Crea un middleware llamado FirstMiddleware ejecutando la siguiente línea de código.
php artisan make:middleware FirstMiddleware
Step 3 - Agregue el siguiente código en el handle método del FirstMiddleware recién creado en app/Http/Middleware.
FirstMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
class FirstMiddleware {
public function handle($request, Closure $next) {
echo '<br>First Middleware';
return $next($request);
}
}
Step 4 - Crea un middleware llamado SecondMiddleware ejecutando el siguiente comando.
php artisan make:middleware SecondMiddleware
Step 5 - Agregue el siguiente código en el método de manejo del SecondMiddleware recién creado en app/Http/Middleware.
SecondMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
class SecondMiddleware {
public function handle($request, Closure $next) {
echo '<br>Second Middleware';
return $next($request);
}
}
Step 6 - Crea un controlador llamado UserController ejecutando la siguiente línea.
php artisan make:controller UserController --plain
Step 7 - Después de la ejecución exitosa de la URL, recibirá el siguiente resultado:
Step 8 - Copie el siguiente código a app/Http/UserController.php archivo.
app/Http/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function __construct() {
$this->middleware('Second');
}
public function showPath(Request $request) {
$uri = $request->path();
echo '<br>URI: '.$uri;
$url = $request->url();
echo '<br>';
echo 'URL: '.$url;
$method = $request->method();
echo '<br>';
echo 'Method: '.$method;
}
}
Step 9 - Ahora inicie el servidor web interno de php ejecutando el siguiente comando, si aún no lo ha ejecutado.
php artisan serve
Step 10 - Visite la siguiente URL.
http://localhost:8000/usercontroller/path
Step 11 - La salida aparecerá como se muestra en la siguiente imagen.
Controladores de recursos tranquilos
A menudo, al hacer una aplicación, debemos realizar CRUD (Create, Read, Update, Delete)operaciones. Laravel nos facilita este trabajo. Simplemente cree un controlador y Laravel proporcionará automáticamente todos los métodos para las operaciones CRUD. También puede registrar una única ruta para todos los métodos en el archivo routes.php.
Ejemplo
Step 1 - Crea un controlador llamado MyController ejecutando el siguiente comando.
php artisan make:controller MyController
Step 2 - Agregue el siguiente código en
app/Http/Controllers/MyController.php archivo.
app/Http/Controllers/MyController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class MyController extends Controller {
public function index() {
echo 'index';
}
public function create() {
echo 'create';
}
public function store(Request $request) {
echo 'store';
}
public function show($id) {
echo 'show';
}
public function edit($id) {
echo 'edit';
}
public function update(Request $request, $id) {
echo 'update';
}
public function destroy($id) {
echo 'destroy';
}
}
Step 3 - Agregue la siguiente línea de código en app/Http/routes.php archivo.
app/Http/routes.php
Route::resource('my','MyController');
Step 4- Ahora estamos registrando todos los métodos de MyController registrando un controlador con recurso. A continuación se muestra la tabla de acciones manejadas por el controlador de recursos.
Verbo | Camino | Acción | Nombre de ruta |
---|---|---|---|
OBTENER | /mi | índice | my.index |
OBTENER | / mi / crear | crear | my.create |
ENVIAR | /mi | Tienda | mi tienda |
OBTENER | /mi mi} | show | mi programa |
OBTENER | / mi / {mi} / editar | editar | mi edición |
PONER / PATCH | /mi mi} | actualizar | my.update |
ELIMINAR | /mi mi} | destruir | my.destroy |
Step 5 - Intente ejecutar las URL que se muestran en la siguiente tabla.
URL | Descripción | Imagen de salida |
---|---|---|
http: // localhost: 8000 / mi | Ejecuta el método de índice de MyController.php | índice |
http: // localhost: 8000 / my / create | Ejecuta el método create de MyController.php | crear |
http: // localhost: 8000 / my / 1 | Ejecuta el método show de MyController.php | show |
http: // localhost: 8000 / my / 1 / edit | Ejecuta el método de edición de MyController.php | editar |
Controladores implícitos
Los controladores implícitos le permiten definir una única ruta para manejar cada acción en el controlador. Puede definirlo en el archivo route.php conRoute:controller método como se muestra a continuación.
Route::controller(‘base URI’,’<class-name-of-the-controller>’);
Reemplaza <class-name-of-the-controller> con el nombre de clase que le has dado a tu controlador.
El nombre del método del controlador debe comenzar con un verbo HTTP como get o post. Si lo inicia con get, solo manejará la solicitud de get y si comienza con post, manejará la solicitud de post. Después del verbo HTTP, puede, puede dar cualquier nombre al método, pero debe seguir la versión del título del URI.
Ejemplo
Step 1- Ejecute el siguiente comando para crear un controlador. Hemos mantenido el nombre de la claseImplicitController. Puede dar cualquier nombre de su elección a la clase.
php artisan make:controller ImplicitController --plain
Step 2 - Después de la ejecución exitosa del paso 1, recibirá el siguiente resultado:
Step 3 - Copie el siguiente código a
app/Http/Controllers/ImplicitController.php archivo.
app/Http/Controllers/ImplicitController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
/**
* Responds to requests to GET /test
*/
public function getIndex() {
echo 'index method';
}
/**
* Responds to requests to GET /test/show/1
*/
public function getShow($id) {
echo 'show method';
}
/**
* Responds to requests to GET /test/admin-profile
*/
public function getAdminProfile() {
echo 'admin profile method';
}
/**
* Responds to requests to POST /test/profile
*/
public function postProfile() {
echo 'profile method';
}
}
Step 4 - Agregue la siguiente línea a app/Http/routes.php para enrutar las solicitudes al controlador especificado.
app/Http/routes.php
Route::controller('test','ImplicitController');
Inyección de constructor
El contenedor de servicios de Laravel se utiliza para resolver todos los controladores de Laravel. Como resultado, puede escribir sugerencias sobre cualquier dependencia que su controlador pueda necesitar en su constructor. Las dependencias se resolverán e inyectarán automáticamente en la instancia del controlador.
Ejemplo
Step 1 - Agregue el siguiente código a app/Http/routes.php archivo.
app/Http/routes.php
class MyClass{
public $foo = 'bar';
}
Route::get('/myclass','[email protected]');
Step 2 - Agregue el siguiente código a
app/Http/Controllers/ImplicitController.php archivo.
app/Http/Controllers/ImplicitController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
private $myclass;
public function __construct(\MyClass $myclass) {
$this->myclass = $myclass;
}
public function index() {
dd($this->myclass);
}
}
Step 3 - Visite la siguiente URL para probar la inyección del constructor.
http://localhost:8000/myclass
Step 4 - La salida aparecerá como se muestra en la siguiente imagen.
Método de inyección
Además de la inyección del constructor, también puede escribir - hint dependencias en los métodos de acción de su controlador.
Ejemplo
Step 1 - Agregue el siguiente código a app/Http/routes.php archivo.
app/Http/routes.php
class MyClass{
public $foo = 'bar';
}
Route::get('/myclass','[email protected]');
Step 2 - Agregue el siguiente código a
app/Http/Controllers/ImplicitController.php archivo.
app/Http/Controllers/ImplicitController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
public function index(\MyClass $myclass) {
dd($myclass);
}
}
Step 3 - Visite la siguiente URL para probar la inyección del constructor.
http://localhost:8000/myclass
Producirá la siguiente salida: