Começando com Laravel

Fico muito feliz pelo seu interesse pelo Laravel. Ele é um framework moderno, com baixa curva de aprendizado, altamente produtivo e que segue as boas práticas de desenvolvimento de software.

Só que antes de começar a aprender sobre o Laravel, é preciso entender alguns conceitos importantes para tornar o aprendizado um pouco mais sólido e simples de entender. Abordarei de forma rápida alguns assuntos como o estado atual do PHP, orientação a objetos, aplicações web, frameworks, arquitetura e gerenciamento de dependências.

Venha comigo e vamos redescobrir o PHP através desta excelente ferramenta chamada Laravel nesta série de artigos!

O renascimento do PHP

Pode ser que você não tenha notado, mas o PHP tem passado por uma grande evolução nos últimos anos. Ele deixou de ser uma “linguagem de brinquedo” e consolidou-se entre as linguagens mais importantes para o desenvolvimento web, sendo utilizado por grandes empresas e projetos de código aberto.

Foram diversas as evoluções que o PHP teve ao longo dos anos que pavimentaram o caminho para uma linguagem mais madura e robusta. Hoje ele conta com uma sólida base de orientação a objetos, funcionalidades como closures, generators e traits, iniciativas de padronização com o PHP-FIG e as PSRs, ferramentas como Composer para o gerenciamento de dependências, um vasto e confiável repositório de bibliotecas como o Packagist e uma comunidade fora de série.

O PHP, como toda linguagem, ainda tem muito para melhorar e continua a sua evolução. O PHP 7 foi lançado há cerca de um ano e ficou aproximadamente duas vezes mais rápido que a versão anterior. E muitas outras novidades estão por vir! ;)

Orientação a objetos, a base de tudo!

Como dito anteriormente, uma das mudanças mais importantes para o amadurecimento do PHP foi uma sólida implementação do paradigma orientado a objetos. Sabe-se que o PHP nasceu procedural e ao longo do tempo foi se tornando orientado a objetos.

Uma das maiores vantagens da programação orientada a objetos é permitir uma melhor representação de um problema, com melhor organização e alto reaproveitamento de código.

Conceitos como classes, métodos, propriedades, herança, namespaces, instâncias entre outros fazem parte do vocabulário de uma linguagem orientada a objetos.

Como uma aplicação web funciona?

Uma aplicação web funciona no modelo cliente-servidor. O cliente faz a requisição de uma página e o servidor envia uma resposta. O cliente é, na maioria das vezes, um navegador web e o servidor é, na maioria das vezes, um servidor web como o Apache ou Nginx.

A maneira com que interagimos com uma aplicação web é bastante trivial hoje em dia. Em um fluxo normal, acessamos a aplicação web através de uma URL e uma página é mostrada. No contexto de um e-commerce, por exemplo, você terá acesso ao catálogo de produtos retornado a partir de consultas em uma base de dados. Nele é possível selecionar um produto de sua escolha e adicionar ao carrinho de compras. Ao finalizar a compra, você informa os seus dados cadastrais, endereços de entrega e cobrança e as informações de pagamento. No final, uma tela de confirmação será exibida e um e-mail será enviado para você.

Ao projetar uma aplicação é importante entender claramente a regra de negócio e o objetivo que deve ser atingido com a aplicação. Isso permite arquitetar corretamente a estrutura da aplicação.

Frameworks

Muito se fala sobre frameworks, mas raramente discute-se sua definição e quais problemas um framework resolve.

Um framework é um conjunto de classes que possui uma arquitetura e organização pré-definida e é utilizado para solucionar um tipo específico de problema, um domínio específico.

Um framework web, por exemplo, é utilizado para solucionar um tipo específico de problema que é a criação de aplicações web. Ele costuma ter uma arquitetura e organização pré-definida decorrente de decisões de projeto amplamente discutidas e da experiência de seus criadores e colaboradores. Ele também possui um conjunto de funcionalidades disponíveis que são comuns em quase todas as aplicações web modernas como uma camada de acesso a banco de dados, gerenciamento de sessões, validação de dados e assim por diante. ​

Um framework web pode ser visto como o esqueleto de uma aplicação. Ele possui partes fixas que são implementadas pelo próprio framework e partes variáveis que são implementadas pelo próprio programador para especificar as funcionalidades de sua aplicação. Existem diversos excelentes frameworks web em PHP como o Zend Framework, o Symfony e o Laravel. ​

MVC e arquitetura

É comum aprendermos a programar PHP de forma procedural. Em um só arquivo costumamos receber os parâmetros da requisição, realizar validações, abrir conexão com o banco de dados, realizar as consultas necessárias e iterar sobre o resultado da consulta adicionando código HTML dinamicamente. É uma abordagem muito simples, por isso aprendemos mais facilmente!

Porém, nos dias de hoje, essa não é uma abordagem muito adequada. Ao utilizá-la, ferimos a separação de responsabilidade e o código se torna não reutilizável. Como consequência, teremos código repetido e difícil de manter. ​

Grande parte das aplicações web hoje em dia utilizam o MVC ou Model-View-Controller. Ele é um padrão de arquitetura de software que permite organizar o projeto em camadas separando a lógica de negócio da lógica de apresentação. O fluxo de funcionamento do MVC é bastante simples: o controller recebe as requisições, solicita as informações necessárias para a model e envia as informações para a view organizar e apresentar o conteúdo. ​

Diagrama da arquitetura MVC

Com esta organização em camadas, as responsabilidades ficam melhor separadas. O controller apenas recebe a requisição e retorna um resultado. Ele não sabe se comunicar com o banco de dados e isso não é de sua responsabilidade. Ele apenas repassa esta tarefa para o seu responsável. A model é a responsável pela lógica do negócio e pela comunicação com a base de dados. Após realizar as suas tarefas, a model retorna os dados para o controller — que também não sabe sobre como apresentar conteúdo — e, por sua vez, retorna estes dados para a view. A view é a responsável pela apresentação do conteúdo. E assim o faz! ​

Gerenciamento de dependências com o Composer

O Composer é uma ferramenta para o gerenciamento de dependências em PHP. As dependências são os pacotes ou bibliotecas que o nosso projeto depende para o seu funcionamento. A utilização de pacotes permite que o desenvolvedor se preocupe somente com a lógica de negócio da sua aplicação deixando tarefas como validação de formulários, acesso a banco de dados ou envio de e-mail para bibliotecas terceiras. ​

O Composer permite declarar as dependências do seu projeto para que ele faça o gerenciamento (instalação e atualização) delas para você de forma simples e automatizada. Ele possui acesso a um vasto repositório de pacotes chamado Packagist onde você pode consultar ou publicar pacotes. ​

Pacote da biblioteca Respect\Validation no Packagist.org

O Composer pode ser facilmente instalado no Windows, Mac ou Linux. A instalação no Windows pode ser feita baixando e executando o instalador conforme explicado no manual. E a instalação no Mac ou Linux pode ser feita através da linha de comando utilizando os seguintes comandos: ​

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

A utilização do Composer é tão simples que para adicionar a excelente biblioteca de validação Respect\Validation a um projeto, basta utilizar o seguinte comando:

composer require respect/validation

A biblioteca será instalada em um diretório chamado vendor que fica na raiz do seu projeto e as dependências serão listadas em um arquivo chamado composer.json junto com outras informações importantes.

Laravel, o primeiro contato!

O Laravel é um framework web criado por Taylor Otwell e utilizado para a criação de aplicações web de maneira ágil e produtiva. Ele é um framework moderno e utiliza as principais funcionalidades e novidades da linguagem e do ecossistema PHP. Além disso, ele possui uma baixa curva de aprendizado e é de fácil utilização para iniciantes. ​

Você pode construir a sua aplicação em Laravel utilizando a arquitetura MVC ou qualquer outra arquitetura que desejar.

Para iniciar um projeto utilizando Laravel, é recomendável fazer a instalação utilizando o Composer. Ele será responsável por baixar o esqueleto de um projeto Laravel e todas as dependências necessárias para o funcionamento de sua aplicação. Isso pode ser feito utilizando o seguinte comando: ​

composer create-project laravel/laravel meu-app — prefer-dist

Explicando o comando!
O comando anterior diz: utilize o Composer para criar um projeto Laravel em um diretório chamado meu-app e, para isso, utilize sua versão mais estável.

Uma importante ferramenta utilizada no desenvolvimento de software é a linha de comando. Ela é muito utilizada no desenvolvimento de aplicações web e, como você pode ter percebido, ela será utilizada extensivamente em nossos exemplos. Portanto, espera-se um conhecimento básico da linha de comando!

Ao executar o comando anterior, o Composer realizará a instalação do esqueleto de uma aplicação Laravel e de todas as suas dependências no diretório meu-app dentro do diretório de trabalho atual. Este processo é exibido detalhadamente no terminal mostrando o download e a instalação de cada dependência do projeto.

A partir da versão 5.4, o PHP é distribuído com um servidor web embutido, ou seja, você poderá testar suas aplicações web feitas em PHP sem a necessidade de instalação do Apache ou Nginx. Veja que prático! ​

Para servir a sua aplicação web utilizando o servidor embutido do PHP, utiliza-se o seguinte comando:

php -S localhost:8000 -t public

Explicando o comando!
O comando anterior diz: utilize o servidor embutido do PHP para servir a aplicação em localhost na porta 8000 apontando para o diretório public. Lembre-se, o comando deve ser executado a partir do diretório do projeto que deseja servir.

Feito isso, a aplicação estará disponível para ser acessada! Abra o navegador, digite http://localhost:8000 na barra de endereço e veja a sua aplicação Laravel rodando pela primeira vez. Parabéns!

Aplicação Laravel rodando utilizando o servidor embutido do PHP

Conclusão

Em resumo, um framework web é utilizado para solucionar um problema de domínio específico que é a criação de aplicações web. E, ao utilizar um framework, é importante entender o contexto em que ele está inserido. ​

No caso do Laravel, é importante ter um conhecimento sólido da linguagem de programação PHP e conhecer orientação a objetos e a arquitetura MVC. É importante também conhecer ferramentas como a linha de comando e o gerenciador de dependências Composer. ​

A compreensão dos conceitos abordados neste artigo te ajudará no entendimento de conceitos futuros e facilitará o seu caminho nesta jornada. Bons estudos e até o próximo artigo da série! ;)