Laravel é um Framework que o usa o Padrão de Projeto MVC (Model View Controller – nascido em 1970 aproximadamente) por natureza. Uma de suas mais fortes armas é a capacidade de gerir um projeto de forma 100% adequada a esse padrão e é nisso que vamos nos ater nessa noite.
As aplicações que usam MVC possuem um ponto de entrada, nesse caso, no Laravel a parte de entrada fica em —> PastaOndeOLaravelEstáInstalado/routes/web.php
Dentro desse arquivo já dá para ver o conteúdo de uma rota padrão (‘/’) respondendo para o Welcome do Laravel:
Route::get('/', function () {
return view('welcome');
});
De imediato já sabemos aqui que uma gama de possibilidades surge.
Para criarmos uma Controller nova basta rodarmos o segunite comando em nosso terminal:
php artisan make:controller NomeDaController
Isso vai criar uma classe no seguinte path:
PastaDoLaravel/app/Http/Controllers/NomeDaController.php
Então, a título de exemplo vamos criar uma chamada Séries de Séries de Filmes/Animes:
php artisan make:controller SeriesController
Pronto, criamos uma controller oficialmente pelo Laravel com o artisan!
O bom do artisan é que ele cria a classe certinha e já deixa ela no namespace correto, isso garante acertividade máxima ao invés de contarmos com a possibilidade de errar algum path ou digitação no geral.
A título de detalhe temos dentro desse arquivo SeriesController um detalhe:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class SeriesController extends Controller
{
...
O fato dele extender de Controller isso já dá mais ferramentas para uso. Lembrando que Facades ali não é o padrão FACADE (design pattern), é um nome que foi dado pelos desenvolvedores do Laravel.
Algo peculiar do artisan no momento da criação de uma Controller é o parâmetro resource que gera todas as ACTIONS pré-definidas para uso.
Se considerarmos o comando a seguir:
php artisan make:controller LojaController --resource
O termo --resource indica para o artisan a ordem de criar a classe LojaController contendo todos os ACTIONS de uma controller Laravel, e isso implica em dizer que estamos deixando a controller com uma cara de "CRUD", como pode ser visto aqui:
https://laravel.com/docs/9.x/controllers#actions-handled-by-resource-controller
E para testes finais, caso queira ver sua controller funcionando é tranquilo, no arquivo PastaDoLaravel/routs/web.php você deve adicionar a seguinte linha:
Route::get('/areadosite', [LojaController::class, 'index']);
E após chamar o namespace oficial (isso já estará no arquivo) você deve usar o namespace de sua controller, no caso vou colocar como ficaria o topo do seu arquivo:
<?php
use App\Http\Controllers\LojaController;
use Illuminate\Support\Facades\Route;
Com isso já teremos sua Controller LojaController rodando quando alguém tentar acessar http:// OU https://enderecoDoSeuSiteOUIP/areadosite, isso vai trazer o conteúdo de LojaController.php que está em PastaDoLaravel/app/Http/Controllers/LojaController.php
O argumento [índice de array chamado index] indica a ACTION do Laravel na controller LojaController que deve conter mais ou menos isso aqui:
class SeriesController extends Controller
{
public function index() {
//faça alguma coisa
}
}
Perceba que começamos com GET (verbos HTTP):
Route::get('/areadosite', [LojaController::class, 'index']);
Em resumo falamos -> Da Classe Estática Route pelo método estático get (verbo GET), ao acessar domínio.com.br/areadosite CHAME a controller LojaController (classe) e o método dela chamado index para responder a esta requisição!
No MVC está certinho, haja vista que a controller destinada pelo ponto de entrada (web.php) vai decidir se precisa jogar um visual (View), se vai precisar de dados, por exemplo de um banco de dados (Model) e ela por si, a controller gerenciando aonde isso vai (Controller).
Bom, pessoal, sobre controllers creio que já entendemos o básicão e o mínimo nesse tour do Laravel. Vou falar sobre View (Blade no Laravel) e vou falar sobre Model (Eloquent no Laravel), ok? Abração!
Para entender melhor os Request Methods, os famosos "Verbos HTTP" veja mais em:
https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol