Laravel Controller: 5 passos para desenvolver a lógica da sua aplicação
Início » Laravel Controller: Aprenda em 5 passos a desenvolver a lógica da sua aplicação
Nos primeiros artigos desta série trabalhamos massivamente para aprender e desenvolver o máximo que pudéssemos no tratamento dos dados do banco de dados. Fomos desde a criação da estrutura do banco com as migrations até a criação de respostas RESTful através dos resources. Agora chegou a hora de desenvolvermos a lógica da aplicação com o Laravel Controller.
Se você já conhece sobre o MVC, fica claro que o Controller não se trata de uma exclusividade do Laravel. Mas, como todo framework, o Laravel Controller tem sua forma de trabalhar.
Em sua documentação, podemos ver que a função dos Controllers é organizar e agrupar requests relacionadas, manipulando sua lógica em uma única classe. O que eles querem dizer é que tiraremos toda a complexidade de código que inicialmente estaria na closure das rotas.
1 -Criando o seu primeiro Laravel Controller
2 – Criando os métodos do Controller
3 – Registrando as rotas
4 – Implementando os métodos de CRUD no Laravel Controller
5 – Salvando dados no Banco de dados
Para iniciar o trabalho primeiramente você terá que criar o Controller que irá trabalhar. Voltando ao nosso exemplo prático, vou montar o Controller para criar os endpoints dos nossos produtos. Para isto utilizarei o php artisan.
[code] php artisan make:controller ProductsController [/code]
[php] <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ProductsController extends Controller { // } [/php]
Dependendo do seu projeto, você consegue economizar aqui a tela do create e do edit. No mais, o CRUD vai exigir pelo menos as 5 rotas de interação com a Model.
No nosso caso serão 6 pois colocamos a adição de produtos junto com a listagem. Assim, nosso Laravel Controller ficará como abaixo:
return view('products');
return view('the_product');
return view('product_edit');
Uma observação especial para os métodos show(), edit(), update() e delete(). Nestas funções você pode ver que temos parâmetros vinculados para repassarmos paras as views ou para salvar no banco de dados. O $product irá injetar a instância de Product com o dado que será passado na rota (GET) ou POST.
Para entender melhor vamos seguir e registrar as rotas para este controller.
Agora que as funções estão estruturadas é hora de montar os endpoints. Para isto utilizaremos o arquivo web.php que está na pasta routes. Este arquivo é responsável por rotear o caminho da request para a função correta no controller e retornar o resultado.
Abaixo segue o nosso exemplo.
Route::get('products','ProductsController@index');
Route::post('products','ProductsController@store');
Route::get('products/{product}','ProductsController@show');
Route::get('products/{product}/edit','ProductsController@edit');
Route::patch('products/{product}','ProductsController@update');
Route::delete('products/{product}','ProductsController@destroy');
Aqui utilizamos 4 métodos de request para executar cada ação. GET e POST que são os mais comuns, e PATCH e DELETE que são respectivamente para atualização e remoção de dados.
Você também reparará que nas quatro últimas rotas temos a palavra { product }. Lembra-se da injeção automática da instância Product? Então… a instância de Product será o model referente ao id do produto que você passar nesta rota.
Isso é para o caso de você querer deletar o produto de id 1, basta passar pela URI 'products/1', com o método delete, e implementar a deleção no Laravel Controller.
return redirect('products');
Veja acima como ficou simples deletar um produto.
A instância já possui todas as referências do model do produto 1. Assim, é só executar o comando delete do Eloquent que ele faz o resto sozinho.
Começaremos pelos métodos de Visualização, pois eles são simples métodos que vão receber os dados dos models e repassar para as suas respectivas Views.
return view('products',compact('products','product_lines'));
return view('the_product',compact('product'));
return view('product_edit',compact('product','product_lines'));
Vejam que em edit fizemos também uma busca dentro da model Product_lines. Isto porque eu precisaremos de todas as linhas de produto caso eu queira mudar este produto de linha.
'product_line_id' => request('product_line_id'),
'expiration_time' => request('expiration_time'),
'price' => request('price')
return redirect('product');
Se você leu esta série desde o começo, verá que esta parte já havia sido feita, em parte, no artigo Simplificando models no Laravel.
Na função store() fizemos o mass assignment e na função update setamos cada dado enviado pela Request na instância do model Product e então utilizamos o save() para efetivar a mudança no banco de dados.
Então código final ficou assim:
return view('products',compact('products'));
O Laravel Controller é onde manipulamos a lógica de tratamento das requisições recebendo os dados do model e transmitindo-os para a view. É ele que abstrairá toda a complexidade da rota que, como já diz o nome, apenas roteará a Request feita para sua devida lógica.
Este é apenas um artigo inicial sobre Laravel controller nele ainda podemos implementar validações de dados e middlewares que garantirão segurança e estabilidade ao projeto.