Laravel: O framework FullStack
Introdução
O Laravel é um framework PHP de código aberto desenvolvido por Taylor Otwell, lançado em 9 de junho de 2011. Sua proposta é oferecer um conjunto abrangente de ferramentas que facilitam o desenvolvimento de aplicações web modernas de forma simplificada. Porém, abordarei o Laravel sob a perspectiva do desenvolvimento Fullstack, visando em expor suas principais tecnologias para criação de interfaces, como Blade Templates, Livewire e Inertia.js. Embora o Laravel também seja amplamente utilizado na construção de APIs, mas quero mostrar a sua capacidade de oferecer soluções completas para o frontend e backend dentro do mesmo ecossistema.
Laravel O framework FullStack
O Laravel é altamente popular, e um dos motivos é por ser um framework fullstack. Com um sistema de roteamento pronto para uso, ele permite renderizar requisições diretamente no frontend. Essa renderização pode ser feita através de Blade Templates ou usando uma tecnologia SPA (Single Page Application) como o Inertia.js. A própria documentação recomenda que o Laravel seja utilizado dessa maneira.
Tecnologias Back-end Poderosas no Laravel
O Laravel oferece uma gama de ferramentas para a parte Back-end. Permitindo, assim, estruturar de forma organizada a lógica do servidor.
Rotas e Controladores
No Laravel, o gerenciamento das requisições HTTP é feito por meio do sistema de rotas. O roteamento permite mapear as URLs para ações específicas. As rotas podem ser construídas dentro do arquivo routes/web.php
para aplicações que utilizam as renderizações ou no routes/api.php
para APIs.
Exemplo de uma rota simples:
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;
Route::get('/users', [UserController::class, 'index']);
Dentro do arquivo routes/web.php
, definimos que requisição do tipo GET
para a URL /users
será tratada pelo método index
que faz parte do Controller chamado de UserController
.
E, com isso, os controladores organizam a lógica do Back-end, fazendo com que cada requisição, que terá o seu verbo HTTP definido, seja processada de forma modular e reaproveitável.
Exemplo de um controlador básico:
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index()
{
$users = User::all();
return view('users.index', ['users' => $users]);
}
}
Esse método busca todos os usuários e os passa para uma view, que será renderizada no Front-end.
Models e Eloquent ORM
No Laravel, a camada de dados é gerenciada pelos Models e pelo Eloquent ORM (Object-Relational Mapping). O Eloquent simplifica a interação com o banco de dados, permitindo consultas mais legíveis e organizadas.
Cada model representa uma tabela do banco de dados e contém métodos para interagir com os dados dessa tabela.
Exemplo de um model User
:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasFactory;
protected $fillable = ['name', 'email', 'password'];
// Método para filtrar usuários ativos
public function scopeActive($query)
{
return $query->where('active', true);
}
// Método para ordenar por nome
public function scopeOrderByName($query)
{
return $query->orderBy('name');
Agora, para buscar usuários ativos ordenados pelo nome, basta chamar:
$users = User::active()->orderByName()->get();
O Laravel ainda conta com migrations, que permitem gerenciar a estrutura do banco de dados de forma programática e versionada, facilitando a colaboração em equipes e a automação de mudanças na base de dados.
Tecnologias Front-end! Sensacionais.
PHP e Blade
O laravel te permite construir o front-end usando o próprio PHP. Há vários aplicativos que renderizam usando HTML e incorporam com tags <?php ?>
no meio. Por exemplo, para listar dados recuperados de um banco de dados. No laravel, essa abordagem ainda continua, com a utilização das views e blade. O blade é uma linguagem de template que trouxe uma sintaxe curta e conveniente para exibir os dados. Basicamente, é enviado um documento HTML inteiramente novo do servidor e a página inteira é renderizada novamente pelo navegador.
Exemplo de um blade básico:
//Exibindo o nome do usuário
<div>
@foreach ($users as $user)
Hello, {{ $user->name }} <br />
@endforeach
</div>
Livewire 💓
Com a proposta de se parecer com frameworks JavaScript, como o Vue ou o React, o Livewire é um framework para criar front-end no Laravel de forma dinâmica. O livewire se baseia em componentes que renderizam uma parte da sua UI, que contará com métodos e dados que podem ser acionados e, assim, interage com o front-end do seu aplicativo. É sensacional, pois você constrói o front-end permanecendo no conforto do Laravel. E, em casos que tenha necessidade de acrescentar códigos JavaScript, desenvolvedores livewire utilizam o Alpine.js para isso.
Exemplo de um componente Counter
usando o livewire:
<?php
// Criando um componente counter que irá interagir com o meu front-end
namespace App\Http\Livewire;
use Livewire\Component;
class Counter extends Component
{
public $count = 0;
public function increment()
{
$this->count++;
}
public function render()
{
return view('livewire.counter');
}
}
// Nesse outro arquivo, será exibido o meu front-end, expondo esses
// métodos que poderão ser invocados. Através do 'wire', fazemos essa conexão..
<div>
<button wire:click="increment">+</button>
<h1>{{ $count }}</h1>
</div>
Usando Frameworks JS
Claro que com toda a popularidade que os Frameworks JavaScript têm, muitos desenvolvedores irão querer utilizá-los para a construção do front-end de suas aplicações. O Laravel também resolve isso. Para resolver problemas como roteamento do lado do cliente, autenticação, o Laravel oferece o Inertia.
Inertia
O Inertia preenche a lacuna entre seu aplicativo Laravel e seu front-end React ou Vue, permitindo que você desfrute das funcionalidades do seu Framework JavaScript como as funcionalidade de rotas e controladores do Laravel, para que ocorra “hidratação” de dados e autenticação, tudo dentro do mesmo projeto. Ao injetar o Inertia no seu projeto, ocorrerá só uma mudança: você terá que retornar uma página Inertia no lugar do seu modelo blade. A seguir, mostrarei um exemplo usando o Laravel e Vue.js.
Exemplo de um Controller Users
:
class UsersController
{
public function index()
{
$users = User::active()
->orderByName()
->get(['id', 'name', 'email']);
return Inertia::render('Users', [
'users' => $users
]);
}
}
Esse método busca todos os usuários ativos, ordenando pelo nome e retornando apenas os campos especificados e renderiza para o Inertia enviando a variável $users
que conterá os dados desses usuários.
// Renderização com Vue.js + Inertia
<script setup>
// Importa o componente Layout para estruturar a página
import Layout from './Layout'
// Importa os componentes Link e Head do Inertia.js para navegação e SEO
import { Link, Head } from '@inertiajs/vue3'
// Define as propriedades recebidas do backend (neste caso, um array de usuários)
defineProps({ users: Array })
</script>
<template>
<!-- Usa o componente Layout como estrutura principal da página -->
<Layout>
<!-- Define o título da página usando o componente Head do Inertia.js -->
<Head title="Users" />
<!-- Itera sobre a lista de usuários recebida como propriedade -->
<div v-for="user in users" :key="user.id">
<Link :href="`/users/${user.id}`">
{{ user.name }}
</Link>
<div>{{ user.email }}</div>
</div>
</Layout>
</template>
Esse código em Vue.js importa os componentes de layout, Link e Head do Inertia e define as propriedades recebidas do back-end (neste caso, um array de usuários). Depois usa o componente Layout como estrutura principal da página, define o título usando o componente Head do Inertia e itera a lista de usuários recebida como propriedade.
Kits inicias do Laravel
O Laravel oferece uma ferramenta chamada "Starter Kit", ou Kit Inicial, que inclui recursos essenciais como autenticação e gerenciamento de usuários. Esses kits proporcionam uma vantagem significativa no início do desenvolvimento, pois automatizam boa parte do processo que normalmente seria necessário construir manualmente. Embora o uso desses kits não seja obrigatório, eles são uma ferramenta valiosa para acelerar o desenvolvimento, permitindo que nós, desenvolvedores, se concentrem em outras partes do projeto sem precisar começar do zero.
Conclusão
Gostando ou não, o Laravel é um framework PHP extremamente versátil e robusto, permitindo a construção de aplicações fullstack, construção de API, e vem com diversas abordagens para o front-end. Desde o uso simples com o Blade até soluções mais modernas como Livewire e Inertia.js. Além disso, conta com muitos processos que facilitam a vida do desenvolvedor como, por exemplo, os Kits Iniciais.
Seja utilizando apenas PHP com Blade, criando interfaces dinâmicas com Livewire ou aproveitando toda a potência de frameworks JavaScript como Vue e React com Inertia, o Laravel proporciona um ecossistema muito agradável para o desenvolvimento web moderno. Sendo assim, o Laravel acaba sendo uma excelente opção para quem busca produtividade, organização e eficiência no desenvolvimento de aplicações web.