Laravel - Controladores

Na estrutura MVC, a letra 'C' significa Controlador. Ele atua como um direcionador de tráfego entre visualizações e modelos. Neste capítulo, você aprenderá sobre controladores no Laravel.

Criação de um controlador

Abra o prompt de comando ou terminal com base no sistema operacional que você está usando e digite o seguinte comando para criar o controlador usando o Artisan CLI (Command Line Interface).

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

Substitua o <controller-name> pelo nome do seu controlador. Isso criará um construtor simples enquanto passamos o argumento -plain. Se você não quiser criar um construtor simples, pode simplesmente ignorar o argumento. O construtor criado pode ser visto emapp/Http/Controllers.

Você verá que alguma codificação básica já foi feita para você e você pode adicionar sua codificação personalizada. O controlador criado pode ser chamado de routes.php pela seguinte sintaxe.

Sintaxe

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

Exemplo

Step 1 - Execute o seguinte comando para criar UserController.

php artisan make:controller UserController --plain

Step 2 - Após a execução bem-sucedida, você receberá a seguinte saída.

Step 3 - Você pode ver o controlador criado em app/Http/Controller/UserController.php com alguma codificação básica já escrita para você e você pode adicionar sua própria codificação com base na sua necessidade.

<?php

namespace App\Http\Controllers;

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

class UserController extends Controller {
   //
}

Middleware de controlador

Já vimos o middleware antes e ele também pode ser usado com o controlador. O middleware também pode ser atribuído à rota do controlador ou dentro do construtor do seu controlador. Você pode usar o método de middleware para atribuir middleware ao controlador. O middleware registrado também pode ser restrito a determinado método do controlador.

Atribuindo Middleware para Rota

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

Aqui estamos atribuindo middleware de autenticação para UserController na rota do perfil.

Atribuindo Middleware no construtor do 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');
   }
}

Aqui estamos atribuindo auth middleware usando o método de middleware no UserController construtor.

Exemplo

Step 1 - Adicione as seguintes linhas de código ao app/Http/routes.php arquivo e salve-o.

routes.php

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

Step 2 - Crie um middleware chamado FirstMiddleware executando a seguinte linha de código.

php artisan make:middleware FirstMiddleware

Step 3 - Adicione o seguinte código ao handle método do FirstMiddleware recém-criado em 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 - Crie um middleware chamado SecondMiddleware executando o seguinte comando.

php artisan make:middleware SecondMiddleware

Step 5 - Adicione o seguinte código no método de manipulação do SecondMiddleware recém-criado em 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 - Crie um controlador chamado UserController executando a seguinte linha.

php artisan make:controller UserController --plain

Step 7 - Após a execução bem-sucedida do URL, você receberá a seguinte saída -

Step 8 - Copie o seguinte código para app/Http/UserController.php Arquivo.

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 - Agora inicie o servidor web interno do php executando o seguinte comando, se ainda não o tiver executado.

php artisan serve

Step 10 - Visite o seguinte URL.

http://localhost:8000/usercontroller/path

Step 11 - A saída aparecerá conforme mostrado na imagem a seguir.

Controladores de recursos repousantes

Muitas vezes, ao fazer um aplicativo, precisamos executar CRUD (Create, Read, Update, Delete)operações. O Laravel facilita esse trabalho para nós. Basta criar um controlador e o Laravel fornecerá automaticamente todos os métodos para as operações CRUD. Você também pode registrar uma única rota para todos os métodos no arquivo routes.php.

Exemplo

Step 1 - Crie um controlador chamado MyController executando o seguinte comando.

php artisan make:controller MyController

Step 2 - Adicione o seguinte código em

app/Http/Controllers/MyController.php Arquivo.

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 - Adicione a seguinte linha de código em app/Http/routes.php Arquivo.

app/Http/routes.php

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

Step 4- Estamos agora registrando todos os métodos de MyController registrando um controlador com recurso. Abaixo está a tabela de ações gerenciadas pelo controlador de recursos.

Verbo Caminho Açao Nome da Rota
PEGUE /meu índice my.index
PEGUE / meu / criar crio my.create
POSTAR /meu loja minha loja
PEGUE /meu meu} exposição meu show
PEGUE / meu / {meu} / editar editar minha edição
PUT / PATCH /meu meu} atualizar my.update
EXCLUIR /meu meu} destruir my.destroy

Step 5 - Tente executar os URLs mostrados na tabela a seguir.

URL Descrição Imagem de saída
http: // localhost: 8000 / my Executa o método de índice de MyController.php índice
http: // localhost: 8000 / my / create Executa o método de criação de MyController.php crio
http: // localhost: 8000 / my / 1 Executa o método show de MyController.php exposição
http: // localhost: 8000 / my / 1 / edit Executa o método de edição de MyController.php editar

Controladores implícitos

Os controladores implícitos permitem que você defina uma única rota para lidar com cada ação no controlador. Você pode defini-lo no arquivo route.php comRoute:controller método conforme mostrado abaixo.

Route::controller(‘base URI’,’<class-name-of-the-controller>’);

Substitua o <class-name-of-the-controller> pelo nome da classe que você deu ao seu controlador.

O nome do método do controlador deve começar com verbo HTTP como get ou post. Se você iniciar com get, ele tratará apenas da solicitação get e se começar com post, ele tratará da solicitação post. Depois do verbo HTTP, você pode dar qualquer nome ao método, mas deve seguir a versão em maiúsculas do URI.

Exemplo

Step 1- Execute o comando abaixo para criar um controlador. Nós mantivemos o nome da classeImplicitController. Você pode dar qualquer nome de sua escolha à classe.

php artisan make:controller ImplicitController --plain

Step 2 - Após a execução bem-sucedida da etapa 1, você receberá a seguinte saída -

Step 3 - Copie o seguinte código para

app/Http/Controllers/ImplicitController.php Arquivo.

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 - Adicione a seguinte linha a app/Http/routes.php arquivo para rotear as solicitações para o controlador especificado.

app/Http/routes.php

Route::controller('test','ImplicitController');

Injeção de construtor

O container de serviço Laravel é usado para resolver todos os controladores Laravel. Como resultado, você é capaz de digitar qualquer dependência que seu controlador possa precisar em seu construtor. As dependências serão resolvidas automaticamente e injetadas na instância do controlador.

Exemplo

Step 1 - Adicione o seguinte código a app/Http/routes.php Arquivo.

app/Http/routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Step 2 - Adicione o seguinte código a

app/Http/Controllers/ImplicitController.php Arquivo.

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 o seguinte URL para testar a injeção do construtor.

http://localhost:8000/myclass

Step 4 - A saída aparecerá conforme mostrado na imagem a seguir.

Método de injeção

Além da injeção de construtor, você também pode digitar - dependências de dica nos métodos de ação do seu controlador.

Exemplo

Step 1 - Adicione o seguinte código a app/Http/routes.php Arquivo.

app/Http/routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Step 2 - Adicione o seguinte código a

app/Http/Controllers/ImplicitController.php Arquivo.

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 o seguinte URL para testar a injeção do construtor.

http://localhost:8000/myclass

Ele produzirá a seguinte saída -