O PHP Laravel é um framework de aplicação, com base em um projeto Open Source - Código Fonte Aberto, destinado ao desenvolvimento de sistemas para web, com sintaxe expressiva e elegante. Ele é desenvolvido na linguagem PHP, sendo de fácil adoção e aprendizado.

Sua estrutura da web fornece uma infraestrutura e ponto de partida para a criação de seu aplicativo, permitindo que você se concentre nas regras de negócio do seu software.

Deixe o framework cuidar dos detalhes como sanitização de dados, regras validação de entradas de usuários, tratamento de cabeçalhos de requisição HTTP, formatação da estrutura de resposta HTTP, dentre muitos outras características técnicas.

O Framework Laravel se esforça para fornecer uma excelente experiência ao desenvolvedor, fornecendo recursos poderosos, como injeção de dependência completa, uma camada de abstração de banco de dados expressiva, filas e trabalhos agendados, testes de unidade e integração e muito mais.

Quer você seja novo em PHP ou frameworks web, ou tenha anos de experiência, o Laravel é um framework que pode acompanhar você no crescimento como desenvolvedor ou equipe.

Agora que você já sabe o que é o Framework PHP Laravel, conheça um pouco da sua estrutura e qualidade nos tópicos a seguir. Não deixe de ler também o artigo que apresenta uma visão completa dos Componentes de arquitetura do Framework PHP Laravel.

Visão geral do Framework Laravel

O Laravel é a melhor escolha dentre os frameworks PHP para a construição aplicativos para web modernos, robustos e escaláveis.

Ciclo de Releases

Tanto o framework Laravel em si, como seus outros pacotes originais seguem o Controle de Versão Semântico - SEMVER.

As versões principais (major) do framework são lançadas anualmente aproximadamente em setembro, enquanto as versões menores (minor) e de patch podem ser lançadas com frequência semanal. Versões secundárias e de patch nunca devem conter alterações importantes que quebrem compatibilidades.

[semver]: Semantic Versioning - Versionamento semântico: documentação oficial em https://semver.org/lang/pt-BR/

Laravel 8

Ao escrever este artigo o Laravel estava em sua versão de número 8, como principais características ela mantem as melhorias feitas no Laravel 7.x introduzindo Laravel Jetstream, model factory classes, squashing de migrações, job batching (lote de jobs), limitação de rate aprimorada, melhorias de filas, componentes Blade dinâmicos, visualizações de paginação com Tailwind, helpers auxiliares para testes com tempo (time tests), melhorias no artisan serve, melhorias do listener de eventos e uma variedade de outras correções de bugs e melhorias de usabilidade.

Para um detalhamento mais aprofundado dos aperfeiçoamentos nesta versão, leia o artigo [Laravel 8][2].

Conheça agoras as características gerais do projeto e do Framework Laravel:

Política de Suporte

O projeto fornece ferramentas e componentes para aumentar a produtividade e qualidade dos projetos desenvolvidos.

As versões LTS (Long Term Support - Suporte de Longa Duração) garantem que determinadas versões do framework receberão correções de bugs por 2 (dois) anos e correções de problemas de segurança - security fixes, por 3 (três) anos. Para as demais versões, de maneira geral, as correções de bug serão realizadas por 7 (sete) meses e de segurança por 1 (um) ano.

Para versões LTS, como o Laravel 6, as correções de bugs são fornecidas por 2 anos e as correções de segurança são fornecidas por 3 anos. Essas versões fornecem a janela mais longa de suporte e manutenção.

Para lançamentos gerais, as correções de bugs são fornecidas por 18 meses e as correções de segurança são fornecidas por 2 anos. Para todas as bibliotecas adicionais, incluindo o Lumen, apenas a versão mais recente recebe correções de bug.

VersãoReleaseBug Fixes atéSecurity Fixes até
6 (LTS)3 de Setembrod, 20197 de Setembro, 20216 de Setembro, 2022
7March 3rd, 2020October 6th, 2020March 3rd, 2021
8September 8th, 2020March 1st, 2022September 6th, 2022
9 (LTS)Setembro, 2021September, 2023Setembro, 2024
10Setembro, 2022Março, 2024Setembro, 2024

Tabela de releases Laravel com prazo de manutenção de Bug fixes e Security fixes

Estrutura progressiva

A equipe principal do projeto Laravel gosta de chama-lo de framework “progressivo”. Com isso, querem dizer que o Laravel é capaz de acompanhar o crescimento de seu projeto e, em caso de programadores juniores ou iniciantes, o seu desenvolvimento profissional.

Se você está apenas dando os primeiros passos no desenvolvimento web, além da vasta biblioteca de documentação, guias e tutoriais, é importante saber que a comunidade em torno do projeto é muito grande, de alcance mundial e com excelentes profissionais dispostos a auxiliar os iniciantes.

É um desenvolvedor sênior? Melhor ainda, o Laravel oferece ferramentas robustas para injeção de dependência, teste de unidade, filas, eventos em tempo real e muito mais. O framework é ajustado para construir aplicações web profissionais e pronto para lidar com cargas de trabalho corporativas.

Estrutura Escalável

A linguagem PHP quando utilizada com bons conceitos de arquitetura de software, oferece alta escalabilidade aos sistemas criados com ela. Por isso é fácil de entender como Laravel pode ser incrivelmente escalonável.

Além da natureza amigável de escalonamento do PHP, graças à excelente arquitetura empregada no framework Laravel, e ao suporte embutido para sistemas de cache rápido e distribuído como o Redis, escalar horizontalmente com o Laravel é muito simples. Na verdade, existem centenas de aplicativos Laravel comerciais que foram facilmente dimensionados para lidar com centenas de milhões de solicitações por mês.

Precisa de escalonamento extremo? Plataformas como o Laravel Vapor permitem que você execute seu aplicativo Laravel em escala quase ilimitada na mais recente tecnologia serverless da Amazon AWS.

Framework Comunitário

O Laravel organiza em sua estrutura os melhores pacotes do ecossistema da linguagem PHP para oferecer o framework mais robusto e amigável disponível para o desenvolvedor. Além disso, milhares de desenvolvedores talentosos de todo o mundo contribuem para sua estrutura. Inclusive você pode se tornar um contribuidor do Laravel, verifique, por exemplo, as minhas contribuições aceitas a projeto: PRs de @nunomazer.

Padrões de Projeto no Laravel

Sendo um framework que emprega uma arquitetura se software robusta, prezando por boas práticas de desenvolvimento e estruturação do código fonte, ele emprega vários desgin patterns - padrões de projeto de software, em sua infraestrutura.

A lista a seguir apresenta os principais padrões de projeto implementados pelo framework Laravel e descreve uma visão geral sobre cada um:

MVC - Model View Controller

Modelo-Visão-Controlador é um padrão de arquitetura de software que separa a representação da informação do controle de interação com o usuário e as regras de negócio.

O modelo (model) é responsável pela gestão dados da aplicação, regras de negócios, lógica e funções.

A visão (view) é qualquer saída de representação dos dados, como uma tela HTML, um relatório, uma tabela ou um conjunto de dados em formato JSON ou XML. É possível ter várias visões do mesmo conjunto de dados, como um gráfico de barras para gerenciamento e uma visão tabular para um cadastro.

O controlador (controller) faz a mediação da entrada (requisições do cliente), convertendo-a em ordens para o modelo ou visão. O controlador é responsável por gerenciar (orquestrar) o fluxo de atendimento à uma requisição.

Facade

Em padrões de projeto de software, um façade (“fachada” em inglês, palavra de origem francesa; comu-
mente escrito em inglês sem o cedilha, mas ainda com som de /s/: facade) é um objeto que disponibiliza
uma interface simplificada para uma das funcionalidades de uma API, por exemplo.

Um façade pode tornar uma biblioteca de software mais fácil de entender e usar ou reduzir as dependências em relação às características internas de uma biblioteca.

Service Provider

Um aplicativo é uma agregação de serviços coesos.

Enquanto um aplicativo oferece um amplo conjunto de funcionalidades em termos de interfaces de programação (APIs) e classes, um serviço fornece acesso a algumas funcionalidades específicas ou recursos. O serviço define as interfaces para a funcionalidade e um modo para recuperar uma implementação.

Por exemplo, considere um aplicativo que fornece uma variedade de informações sobre uma localização geográfica, como os dados de imóveis, informações sobre o tempo, demografia, etc. O serviço de meteorologia, uma parte da aplicação, pode definir apenas a interface para recuperar as informações do tempo.

A interface do provedor de serviço (SPI) é o conjunto de interfaces públicas e classes abstratas que um serviço define. A SPI pode ser representado por uma única interface (tipo) ou classe abstrata ou um conjunto de interfaces ou classes abstratas que definem o contrato de serviço.

IoC - Inversion of Control

Inversão de controle (Inversion of Control ou IoC, em inglês) é o nome dado ao padrão de desenvolvimento de programas de computadores onde a sequência (controle) de chamadas dos métodos é invertida em relação à programação tradicional, ou seja, ela não é determinada diretamente pelo programador.

Este controle é delegado a uma infraestrutura de software muitas vezes chamada de container ou a qualquer outro componente que possa tomar controle sobre a execução. Esta é uma característica muito comum em alguns frameworks.

Em Laravel o ponto de entrada das requisições é único, pelo arquivo public/index.php, o qual instancia o controlador principal, ou front controller, sendo que este é responsável pela inversão de controle, identificando pelos parâmetros da requisição qual método de qual controlador deve responder a ela.

DI - Dependency Injection

Injeção de dependência (Dependency Injection, em inglês) é utilizado para manter baixo o nível de acoplamento entre diferentes módulos e componentes de um sistema.

Neste padrão as dependências entre os componentes não são definidas por instanciações diretas dos programadores, mas sim pela configuração ou uso de padronização de uma infraestrutura de software (container) que é responsável por “injetar” em cada componente suas dependências declaradas.

A Injeção de dependência se relaciona com o padrão Inversão de controle mas não pode ser considerada um sinônimo deste.

Front Controller e Dispatcher

O padrão de projeto de software front controller define um ponto de entrada único para sua aplicação web que trata de todas as requisições HTTP. Por exempo em PHP: index.php, em Laravel especificamente public/index.php

Esse código é responsável por carregar as dependências, executar regras de segurança, internacionalização, autenticação de usuários.

Utilizado em conjunto do padrão de projeto Dispatcher, usa estratégias para a aplicação MVC onde o módulo controlador (front controller) envia o processamento para um distribuidor (dispatcher) que seleciona, com base no contexto da solicitação (parâmetros recebidos pela requisição HTTP), o controlador correto para execução da lógica relacionada à requisição realizada.

Front Controller é um padrão de projeto que, em conjunto com M-V-C possibilita em sistemas Web a implementação de IoC - Inversion of Control.

Observer

Define uma dependência um-para-muitos entre objetos de modo que quando um objeto muda o estado, todos seus dependentes são notificados e atualizados automaticamente.

Permite que objetos interessados (observers) sejam avisados da mudança de estado ou outros eventos ocorrendo num outro objeto.

O padrão Observer é também chamado de Publisher-Subscriber, Event Generator e Dependents.

No framework Laravel ele é implementado com o conceito de Listener.

ORM e ActiveRecord

ORM (Object Relational Mapping - Mapeamento Objeto Relacional) é uma abordagem utilizada para persistir informações de objetos de negócio (aplicação) em um banco de dados relacional (SQLite, Oracle, Sybase, PostgreSQL, Mysql, etc).

Ele realiza, por meio de anotações nas classes que irão representar as entidades em memória, no padrão orientado a objetos, o mapeamento com as tabelas e campos do banco de dados relacional.

Active record é um padrão de projeto onde a interface de um determinado objeto possui ações de manipulação de seus dados, como Inserir(Insert), Atualizar(Update), Apagar(Delete) e propriedades e ações de acesso que correspondam diretamente às colunas do banco de dados associado.

Uma instância de um objeto é associada a um único registo (tupla) na tabela. Após a criação e gravação de um objeto, um novo registo é adicionado à tabela. Um objeto carregado obtém suas informações a partir do banco
de dados. Quando um objeto é atualizado, o registro correspondente na tabela também é atualizado.

Características e funcionalidades

Para encerrar a apresentação do framework, vamos listar algumas das funcionalidades entregues ao desenvolvedor de maneira nativa na sua estrutura, provendo produtividade e segurança para sua aplicação.

Autenticação

O framework Laravel provê a implementação de autenticação padronizada de maneira simples. Esta característica simplifica o desenvolvimento de aplicativos com pouca complexidade e requisitos simples de autenticação, para sistemas com exigências específicas, como utilização de diretórios de acesso (ex. LDAP), OAUTH, é possível sobrescrever a implementação padrão.

Ainda oferece pacotes para a implementação de autenticação por meio de tokens para APIs RestFul.

Roteamento

Modelagem de rotas de atendimento de requisições de recursos e funcionalidades de seu sistema.

As rotas são especificadas por contexto como requisições web para aplicativos clássicos, API, console.

Oferece ainda controle de limitação de requisições por minuto e por IP cliente.

Filtros de segurança

De maneira fácil o framework protege sua aplicação de ataques cross-site request forgeries (CSRF); aplica sanitização das entradas de dados e permite a implementação de middlewares para outros filtros se necessário.

Cache

Fornece uma API unificada para vários sistemas de cache da aplicação. Por meio da especificação de um driver o framework o usa por padrão em toda a sua aplicação.

O Laravel suporta ferramentas como Memcached e Redis. Por padrão vem configurado para usar o drive file, que armazena objetos serializados no sistema de arquivos. Para grandes aplicações, recomenda-se que você utilize um in-memory cache como Memcached ou APC.

Eventos

Eventos no Laravel fornecem uma implementação simples do padrão observer, permitindo que clas
ses/objetos assinem e escutem (listeners) eventos em sua aplicação.

Classes de eventos são tipicamente armazenadas no diretório app/Events, enquanto seus ouvintes são armazenados no diretório app/Listeners.

Um exemplo de uso seria a criação de um evento UsuarioCriado, que ao ser disparado, permita seus ouvintes executar ações de envio de email, criação de perfis específicos, validação de acessos após a criação de um usuário.

Considerações finais

Se a sua Stack de desenvolvimento baseia-se na linguagem de programação PHP mas, mesmo que você trabalhe em uma empresa ou equipe que não adote o Laravel o framework, é essencial conhecer seu potencial de aplicação e, ao menos, ter uma visão geral de suas características e funcionalidades pois, com cerca de 22 milhões de downloads pelas métricas do site Packagist.com, o mesmo não deve ser ignorado.

Estatística de downloads do Laravel
Estatística de downloads do Laravel

Porém, se o seu interesse é conhecer mais sobre este framework, pretende adotá-lo em sua stack e deseja aprender a programar em Laravel, siga este blog para receber artigos sobre boas práticas e resoluções de problemas do “jeito Laravel”.

Clique aqui e leia os artigos sobre Laravel e Desenvolvimento Web.