Executando verificação de segurança...
15

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.

Carregando publicação patrocinada...
2
2
1

Vale um post também sobre a TALL Stack (Tailwind, AlpineJS, Laravel Livewire), com ênfase na Tall Stack UI, desenvolvido por um brasileiro, nosso colega AJ do canal EuSeiPHP... Minha principal stack é essa. O ecossistema é gigantesco, tem todo tipo de ferramenta e nos ajuda no desenvolvimento do dia a dia. Top demais, só não curti mais a postagem, pois não tem como.

1
1

Vale e muito. Livewire é um mundo à parte, tem muita coisa também. Muita integração com AlpineJs, e agora com o próprio vanilla js. Dá uma conferida na documentação que você aprende facilmente. Atualmente deixei de usar os controllers e passei a adotar componentes livewire full page, dessa forma a reatividade fica exatamente como a feita com inertia.

1

Também estou desenvolvendo uma aplicação com Livewire. Confesso que fiquei com pouco de receio inicialmente... Porém, cara, quando você vai desenvolvendo seguindo a documentação, e percebe o quão prático fica, você não vai querer mais largar. Principalmente para aplicações mais simples, não há motivo de encher de várias tecnologias. O Laravel e todo seu ecossistema foca em simplicidade, e, de fato, o simples funciona.

1

Eu estudei bastante antes de começar a utilizar Livewire nos meus projetos. Eu queria a questão da reatividade, mas ainda não tinha confiança. Aí quando vi que funcionava bem comecei a usar os componentes separados. Tinha um pé atrás com full page components, mas esse ano comecei a utilizar e tem sido muito bom.

1

Ótimo artigo! Laravel sem dúvidas é o framework mais completo do mercado, uma pena que muitos o julguem antecipadamente só por utilizar PHP

1
1

Laravel é um bom framework, cheguei a testar algum tempo anos atrás, mas o que me incomoda é o pattern de ActiveModel do Eloquent. Eu sei que há como usar Doctrine ao invés do Eloquent, mas não é uma coisa tão simples quanto poderia ser.

1

Eu sou de um mundo totalmente a parte do PHP e queria entender mais.

Como que eu hospedo esse tipo de aplicação?

Porque quando tentei usar o Laravel, estudei bem pouco ele, eu entendi que você tem um front (LiveWire no meu caso) e um back (PHP)

É possível que separá-los? É bem burra minha pergunta eu imagino kkk.

Hoje eu, por exemplo, trabalho com React e no back eu uso Python.

Mas pelo que eu percebi o Laravel já cria, por exemplo, sistema de login e etc... o que me parece muito útil.

3
1

O Laravel "propõe" uma experiencia completa misturando front+backend, mas você não é obrigado a adotar.

Por exemplo, eu tenho um sistema (bem complexo inclusive) que roda o backend todo em PHP, e o front-end parte é HTML + Ajax (dentro das proprias views do Laravel), e parte é Angular (hospedado a parte do Laravel) que comunica com a API que fiz no Laravel.

1

Você pode criar tudo junto (monolito) front e back, livewire, blade, inertia (react e vue) por exemplo. Ou você pode criar uma API para ser consumida pelo seu front separado, app mobile por exemplo.

O Laravel possui vários starter kits que já deixam prontos a parte de autenticação e um dashboard básico pra você customizar, e é sim muito útil, inclusive tem novos starter kits agora lançados no Laravel 12 com react e vue.

1
1

Exato, esqueça JWT e afins, o Sanctum resolve sua vida de maneira incrivelmente simples. Só não tinha citado, pois não é obrigatório usar, pode ser uma api pública também. Laravel + comunidade PHP = sucesso