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: