laravel controller

Nel framework MVC, la lettera “C” sta per Controllers, e il questo articolo vedremo come usare i Controller in Laravel. Agisce come un traffico diretto tra viste e modelli. In questo articolo vediamo come creare e impostare i controller in Laravel.

Creare un controller in laravel

Per creare un controller, dobbiamo aprire il prompt dei comandi o il terminale, in base al sistema operativo che stiamo utilizzando, e digitiamo il seguente comando per creare il controller utilizzando Artisan CLI (Command Line Interface).

php artisan make:controller <controller-name> --plain

Sostituisci <controller-name> con il nome del tuo controller. Questo creerà un controller. Il controller creato può essere visualizzato in app/Http/Controllers .

Vedrai che è già stata eseguita una codifica di base per te e puoi aggiungere la tua codifica personalizzata. Il controller creato può essere chiamato da web.php con la seguente sintassi.

Sintassi
Route::get(‘base URI’,’controller@method’);
Esempio

1 : eseguire il seguente comando per creare MyController

php artisan make:controller MyController

2 – Dopo l’esecuzione riuscita, riceverai il seguente output.

laravel controller crea mycontroller

3 – Troveremo il controller creato in app/Http/Controller/MyController.php con del codice di base già scritto e possiamo fare modifiche in base alle necessità.

laravel controller MyController codice

Middleware del Controller

Abbiamo già visto il middleware e possiamo utilizzarlo anche con il controller. Il middleware può anche essere assegnato alla route del controller o all’interno del costruttore del controller. È possibile utilizzare il metodo middleware per assegnare il middleware al controller. Il middleware registrato può anche essere limitato a determinati metodi del controller.

Assegnazione del middleware alla route
Route::get('profile', [
   'middleware' => 'auth',
   'uses' => 'UserController@showProfile'
]);

Qui stiamo assegnando il middleware di autenticazione a UserController nel percorso del profilo.

Assegnazione del middleware all’interno del costruttore del controller
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class MyController extends Controller {
   public function __construct() {
      $this->middleware('auth');
   }
}

Qui stiamo assegnando il middleware di autenticazione utilizzando il metodo middleware nel costruttore MyController .

Si noti che $this->middleware() funziona solo se lo si assegna nel costruttore. Se chiamiamo $this->middleware() da un metodo controller specifico, non genererà alcun errore ma il middleware non funzionerà effettivamente.

Questa opzione è valida, ma personalmente preferisco inserire tutti i middleware nelle routes, perché è più chiaro dove cercare tutti i middleware.

Esempio

1 – Aggiungiamo le seguenti righe di codice al file routes/web.php e salviamo.

<?php
Route::get('/mycontroller/path',[
   'middleware' => 'First',
   'uses' => 'MyController@showPath'
]);

2 – Creiamo un middleware chiamato FirstMiddleware eseguendo la seguente riga di codice.

php artisan make:middleware FirstMiddleware

3 : aggiungere il seguente codice nel metodo handle del FirstMiddleware appena creato in app/Http/Middleware .

<?php

namespace App\Http\Middleware;
use Closure;

class FirstMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>First Middleware';
      return $next($request);
   }
}

4 – Creiamo un middleware chiamato SecondMiddleware eseguendo il seguente comando.

php artisan make:middleware SecondMiddleware

5 : aggiungiamo il seguente codice nel metodo handle del SecondMiddleware appena creato in app/Http/Middleware .

<?php

namespace App\Http\Middleware;
use Closure;

class SecondMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>Second Middleware';
      return $next($request);
   }
}

6 : creiamo un controller chiamato MyController eseguendo la seguente riga.

php artisan make:controller MyController

7 – Dopo l’esecuzione corretta dell’URL, riceverai il seguente output –

laravel controller crea mycontroller

8 – Copia il seguente codice nel file app/Http/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 __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;
   }
}

9 – Ora avviamo il server Web interno di php eseguendo il seguente comando, se non lo hai ancora eseguito.

php artisan serve

10 – Visita il seguente URL.

http://localhost:8000/mycontroller/path

11 – L’output apparirà come mostrato nell’immagine seguente.

UserController2

Praticamente entrambi i middleware intervengono, ma solo uno

Controller di restful resource

Spesso durante la creazione di un’applicazione è necessario eseguire operazioni CRUD (Create, Read, Update, Delete)Laravel semplifica questo lavoro. Basta creare un controller e Laravel fornirà automaticamente tutti i metodi per le operazioni CRUD. Possiamo anche registrare un singolo percorso per tutti i metodi nel file route.php.

Esempio

1 : creare un controller chiamato MyController eseguendo il seguente comando.

php artisan make:controller MyController

2 : aggiungere il seguente codice in 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';
   }
}

3 – Aggiungiamo la seguente riga di codice nel file routes/web.php .

Route::resource('my','MyController');

4 – Ora stiamo registrando tutti i metodi di MyController registrando un controller con resource. Di seguito è riportata la tabella delle azioni gestite dal controller delle risorse.

VerbPathActionRoute Name
GET/myindexmy.index
GET/my/createcreatemy.create
POST/mystoremy.store
GET/my/{my}showmy.show
GET/my/{my}/editeditmy.edit
PUT/PATCH/my/{my}updatemy.update
DELETE/my/{my}destroymy.destroy

5 – Prova a eseguire gli URL mostrati nella tabella seguente.

URLDescrizioneuscita
http://localhost:8000/myEsegue il metodo index di MyController.phpindex
http://localhost:8000/my/createEsegue il metodo create di MyController.phpcreare
http://localhost:8000/my/1Esegue il metodo show di MyController.phpshow
http://localhost:8000/my/1/editEsegue il metodo edit di MyController.phpedit

Ercole Palmeri

Autore