Ademir C. Gabardo
Novatec
Copyright © 2017 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates PY20170308 Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata Capa: Carolina Kuwabata ISBN: 978-85-7522-550-9 Histórico de impressões: Março/2017
Primeira edição
Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 E-mail: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec
capítulo 1
Introdução
Neste capítulo abordaremos o que é e para que serve um framework, como um framework traz vantagem para o dia a dia do desenvolvedor web, o que é o Laravel, o gerenciador de dependências Composer, e faremos a instalação e o deploy local de uma aplicação Olá Mundo com o Laravel.
Para quem é este livro? Este livro se destina a desenvolvedores web que já tenham algum domínio de PHP, HTML e um mínimo conhecimento de JavaScript. Se você está procurando uma ferramenta atual e robusta para desenvolvimento de aplicativos para web com alta qualidade e grande aceitação no mercado, o Laravel é uma ótima opção. Os exemplos desenvolvidos no livro são aplicações simples, mas completas, que abordam todos os passos necessários desde a instalação do Laravel em ambiente local até o deploy da aplicação em um provedor de hospedagem. Ao final da leitura você estará apto a desenvolver seus próprios projetos utilizando o Laravel, incluindo uma API RESTful, upload de arquivos, autenticação de usuários, paginação e mais. Se você nunca usou um framework, não se preocupe, todos os passos necessários para entender o framework Laravel são abordados.
Para quem não serve este livro? Se você nunca teve contato com PHP mas é um desenvolvedor experiente, é provável que você não tenha problemas para executar os passos dos exemplos deste livro, porém eu acredito que esta não seja a melhor abordagem para aprender PHP. Talvez uma melhor abordagem seja buscar outra referência sobre PHP1. 1 https://novatec.com.br/livros/desenvolvendo-websites-com-php-3ed.
13
14
Laravel para Ninjas
Se você nunca teve contato com nenhuma linguagem de programação, é preferível primeiro aprender a linguagem de programação sem o auxílio de nenhum framework e somente após sólido conhecimento sobre a linguagem de programação partir para o estudo de frameworks e outras ferramentas para aceleração de desenvolvimento de código. Neste livro não são abordados assuntos básicos do PHP, como explicar o que são variáveis, arrays, ou funções básicas como conversão de datas ou outras funções do PHP. Aliás, com o Laravel, se faz necessário escrever pouco código nativo, ou seja, você estará mais ocupado escrevendo métodos e classes do Laravel e utilizando, muitas vezes, a linha comando para gerar arquivos. Se você se enquadra no perfil de leitor descrito nesta e na seção prévia, boa leitura e mãos à obra.
O que é um framework? Frameworks para desenvolvimento de software não são novidade. Existem frameworks para quase todas as linguagens e dos mais variados tipos. Um framework compreende um conjunto de classes ou funções implementadas em uma linguagem de programação específica usadas para auxiliar o desenvolvimento de software2. Um framework, então, é uma abstração, um arcabouço que serve como ponto de partida para o desenvolvimento de uma aplicação específica. Os frameworks servem a diversos propósitos, como reduzir ou eliminar a reescrita de código-fonte por meio da reutilização de métodos, classes e funções, forçar a adoção de um padrão ao adotar um determinado tipo de design de projetos, como o MVC, por exemplo, oferecer diversos recursos de uso comuns como validações, criação de formulários, autenticação e outros recursos já prontos ou semiprontos para que não seja necessário reescrever tais funções a cada novo projeto.
O que é o Laravel? Laravel, The PHP Framework for Web Artisans ou, em português, Laravel, o framework PHP para artesãos. Bem, confesso que por muito tempo esse slogan me deixou intrigado. Seria o Laravel coisa de amador? Algo feito “à mão” longe dos padrões da indústria? Bem, de fato, não. As aplicações web deixaram há tempos de ser um simples conjunto de páginas HTML e se transformaram em softwares complexos 2 https://pt.wikipedia.org/wiki/Framework.
Capítulo 1 ■ Introdução
15
com APIs e recursos destinados a atender diversos tipos de dispositivos com necessidades e recursos distintos. Depois de interagir com o Laravel por algum tempo, fica mais claro que o termo “artesãos” na frase se refere ao cuidado em criar um software completo, bem desenvolvido e ao mesmo tempo limpo e de código elegante. Laravel é um framework PHP MVC sob o paradigma de orientação a objetos. Na tradução de sua descrição, temos: “Laravel é um framework de aplicações web com expressiva sintaxe, elegante. Acreditamos que o desenvolvimento deve ser uma experiência agradável, criativo para ser verdadeiramente gratificante. Laravel tenta tirar a dor do desenvolvimento, facilitando tarefas comuns usadas na maioria dos projetos web, como autenticação, roteamento, sessões, filas, e cache3”.
Porque Laravel? Se você acompanha PHP há certo tempo, deve ter percebido que nas versões mais recentes, especificamente da versão 5.X em diante, se tornou cada vez mais object-oriented. Originalmente chamado de Personal Home Pages quando surgiu em 1995, em tradução livre, “páginas web pessoais”, até seu nome mudou, para Hipertext pre-processing. Ou pré-processador de hipertexto. Nas versões recentes, o PHP oferece suporte à inclusão de visibilidade, classes e métodos abstratos e final, métodos mágicos, interfaces, clonagem, dica de tipo etc. O PHP ficou mais robusto, e aplicações mais robustas surgiram usando PHP. Talvez a mais famosa de todas seja o Facebook. Em 1995, quando o PHP surgia, a linguagem era uma das poucas alternativas ao CGI4 e ao Perl5, de modo geral mais complicados e menos acessíveis a desenvolvedores menos experientes, daí a motivação para o Personal Home Pages. Como era mais fácil de programar por não ser tipado e fácil de instalar tanto em servidores Unix based quanto em sistemas operacionais Windows, o PHP se popularizou rápido. Bastava escrever um script com poucas linhas de código, conectar a uma base de dados MySQL e pronto! Rapidamente tínhamos um gerenciador de conteúdo rodando. O cenário atual para desenvolvimento web é bem diferente. A complexidade dos sistemas aumentou consideravelmente, a demanda por qualidade também 3 https://github.com/laravel/laravel. 4 Common Gateway Interface. 5 Practical Extraction and Reporting Language.
16
Laravel para Ninjas
cresceu, e a concorrência entre empresas provedoras de serviço e desenvolvedoras de software faz com que a competição por preço na indústria de sistemas para a web seja mais acirrada. Mas então como se manter relevante em um mercado dinâmico, cada vez mais exigente, com prazos cada vez mais apertados e que se atualiza o tempo todo? Uma das maneiras é cercar-se das melhores ferramentas possíveis. Aí entra o Laravel. Entregar projetos de qualidade em tempo reduzido minimizando a escrita manual de código de forma organizada para que uma equipe possa trabalhar em conjunto, testar as soluções implementadas e dar manutenção em tempo hábil quando necessário. De uma vasta lista de frameworks PHP, o Laravel recebeu grande atenção nos anos recentes. Atualmente, é um dos frameworks PHP mais populares. Você vai entender o porquê logo que começar a trabalhar com ele. Na Figura 1.1, observamos o crescimento pela demanda de profissionais Laravel em comparação aos frameworks CodeIgniter e Zend. O Laravel vem ganhando popularidade, o CodeIgniter se mantém estável com pouco declínio, enquanto o Zend perde consideravelmente demanda6.
Figura 1.1 – Comparativo por demanda de profissionais entre os frameworks Laravel, CodeIgniter e Zend. 6 http://www.indeed.com/jobtrends/q-CodeIgniter-q-Laravel-q-Zend.html.
Capítulo 1 ■ Introdução
17
O Laravel tem boa documentação e comunidade bastante ativa. Esses entre outros vários fatores fazem do Laravel uma ótima escolha para desenvolvimento web. O website do framework pode ser acessado em https://laravel.com a versão utilizada nos exemplos do livro é a 5.2 compatível com a versão 5.3. Os códigos do exemplo ‘Olá mundo’ apresentado no Capítulo 3 foram testados com a versão 5.4 e não houve nenhum problema de incompatibilidade. Os projetos do livro são disponibilizados no GitHub em ambas as versões 5.2 e 5.4. A versão 5.3 foi omitida por ser muito similar a versão 5.2. Os códigos do livro estão disponíveis nos seguintes endereços. • Olá Mundo, Laravel 5.2.* – https://github.com/agabardo/ola-mundo • Olá Mundo, Laravel 5.4.* – https://github.com/agabardo/ola-mundo-5.4 • Lista de Tarefas, Laravel 5.2.* – https://github.com/agabardo/lista-de-tarefas • Lista de Tarefas, Laravel 5.4.* – https://github.com/agabardo/lista-de-tarefas-5.4 ATENÇÃO! Simplesmente fazer o download dos arquivos para uma pasta em seu servidor local não irá funcionar, porque? O Laravel omite diversos arquivos essenciais ao funcionamento do framework dos repositórios GIT por meio do arquivo .gitignore. Os repositórios apresentados servem para verificar o códigofonte e auxiliar na escrita, mas para tirar o maior proveito dos exemplos siga os passos conforme mostrado nos capítulos.
Antes de instalar o Laravel Antes de instalar o Laravel e testar suas funcionalidades, precisamos configurar o ambiente em local para testes e certificar-se de que os pré-requisitos exigidos pelo framework são atendidos. A versão do PHP deve ser igual ou superior à versão 5.6.4 e as seguintes extensões devem estar instaladas: OpenSSL PHP Extension, PDO PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension e XML PHP Extension.
Obtendo um servidor HTTP local com suporte ao PHP Para testar as páginas e os exemplos utilizados neste livro será necessário usar um servidor HTTP local com suporte a PHP. Existem diversas opções disponíveis, como o Apache, IIS, LightHTTPD, Cherokee e Nginx. O Apache é o mais popular
18
Laravel para Ninjas
e pode ser instalado tanto em sistemas operacionais Windows como em Linux e OS X. Se você já tem um servidor web rodando com PHP instalado numa versão igual ou superior à versão 5.6.4, sinta-se à vontade para pular esta seção. Existem duas maneiras de instalar o Apache mais o PHP e o MySQL no seu computador: instalar cada um deles separadamente, baixando os arquivos de download adequados ao sistema operacional do computador (observe também se tem 32 ou 64 bits), ou baixar pacotes que contenham a stack completa para um servidor local. Caso opte por instalar o servidor manualmente, instale primeiro o servidor HTTP7, depois o MySQL8 e então o PHP9; dessa forma o instalador do PHP (provavelmente) encontrará os caminhos e as variáveis necessárias para configurar seu ambiente local. Existem também distribuições “pré-empacotadas” do servidor Apache com PHP, MySQL e extras. As mais populares são: • Windows – WAMP10; Apache, PHP e MySQL. • Windows, Linux e OS X – XAMP11; Apache, MariaDB (MySQL)12, PHP e Perl. • MAC OSX – MAMP13; Apache, NGINX, PHP, MySQL, Python, Perl. Também é possível usar o Laravel Homestead14, um ambiente “pré-empacotado” por meio de virtualização Vagrant box15 (tanto para VMware quanto para VirtualBox). Essa distribuição vem com diversos softwares embutidos. Escolha a opção que lhe agradar mais de acordo com seu sistema operacional. Com o servidor instalado você deve ser capaz de acessar o endereço HTTP local e executar scripts PHP. Para testar seu servidor local e verificar se as extensões requeridas pelo Laravel estão disponíveis, use o seguinte script PHP. <?php phpinfo();
Salve o arquivo como index.php na pasta DocumentRoot do seu servidor local. Ao acessar o endereço http://localhost, você deverá ver uma tela semelhante à mostrada na Figura 1.2. 7 8 9 10 11 12 13 14 15
https://httpd.apache.org. https://dev.mysql.com/downloads/mysql. http://php.net/downloads.php. http://www.wampserver.com. https://www.apachefriends.org/pt_br/index.html. https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-compatibility. https://www.mamp.info. https://laravel.com/docs/5.3/homestead. https://www.vagrantup.com.
Capítulo 1 ■ Introdução
19
Figura 1.2 – Saída da função phpinfo() com detalhes sobre o servidor local.
É possível alterar qual a pasta DocumentRoot no Apache modificando o arquivo de configuração httpd.conf. Basta alterar o caminho apontando para a pasta que lhe for mais conveniente. No Windows, usando o XAMP, isso pode ser feito por meio da interface de administração. Clicando no botão Config na linha do Apache temos acesso ao menu de opções para os arquivos de configuração do Apache, PHP e phpMyAdmin, conforme mostra a Figura 1.3.
Figura 1.3 – Tela de administração do XAMP com acesso rápido aos arquivos de configuração do servidor local.
20
Laravel para Ninjas
Se tudo estiver configurado corretamente e você conseguir acessar o endereço local e visualizar o arquivo index.php apresentado nessa seção conforme mostrado na Figura 1.2, verifique se as extensões OpenSSL PHP Extension, PDO PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension e XML PHP Extension estão instaladas. Se estiverem, prossiga na próxima seção do livro; caso não, verifique primeiro essas dependências. Em todas as experiências que tive, tanto no Windows quanto no Mac OS X a instalação-padrão do XAMP e do MAMP vieram com as bibliotecas instaladas por padrão.
Gerenciador de pacotes Composer Antes de falar especificamente sobre o Composer, vamos falar um pouco sobre gerenciamento de pacotes e dependências. A descrição do Composer de acordo com sua documentação é a seguinte: “Composer é uma ferramenta para gerenciamento de dependência em PHP. Ele permite que você declare as bibliotecas de que seu projeto depende e que irão gerenciar a instalação e atualização desses pacotes para você.”16
O Composer, diferentemente dos gerenciadores de pacotes YUM e APT do Linux, serve para gerenciar dependências e pacotes em nível de projeto e não globalmente (ainda que seja possível fazer isso), ou seja, ao adicionar uma biblioteca de autenticação para um projeto, essa biblioteca será incluída somente nesse projeto, sem afetar os demais projetos do servidor ou computador local. Como exemplo, imagine um website que precise enviar e-mail por meio de uma biblioteca PHP e mensagens SMS por meio de outra biblioteca. Sem o auxílio de um gerenciador de dependências é preciso fazer o download do site do fornecedor das bibliotecas, adicionar à pasta correta na instalação do seu projeto e, por vezes, declarar variáveis ou caminhos para que o framework ou a aplicação reconheça essas bibliotecas. A proposta do gerenciador de pacotes é fazer isso de modo automatizado. Gerenciar pacotes e dependências é rotina no desenvolvimento de sistemas web. Outras linguagens têm seus próprios gerenciadores de pacotes. No Node.JS, por exemplo, usa-se o npm (node package manager). O Ruby usa o RubyGems etc. Então esqueça os downloads de arquivos .zip com dezenas de pastas a configurar e vamos à prática instalando o Composer. 16 https://getcomposer.org/doc/00-intro.md.
Capítulo 1 ■ Introdução
21
Instalando o Composer no Windows Para instalar o Composer no Windows basta fazer download do instalador no site oficial e executar o arquivo de instalação. Siga os passos do instalador. Na tela inicial do instalador existem apenas as opções “próximo” ou “cancelar”. No segundo passo o instalador do Composer irá localizar o arquivo binário do PHP. Isso deve ocorrer automaticamente. Se não ocorrer, selecione o arquivo executável php.exe na pasta de instalação do PHP. Na próxima tela o instalador oferece a opção para o uso de um endereço de servidor proxy para conexão com a Internet. Após esse passo temos a tela com o botão “Instalar” para iniciar o processo de instalação dos arquivos. Depois de clicar em instalar o Composer irá fazer download dos arquivos necessários e uma nova tela com a opção “próximo” será exibida para, enfim, chegar ao fim da instalação. Caso seu terminal de comandos CMD ou Command do Windows esteja aberto, após executar os procedimentos de instalação, feche o terminal e reabra-o. Isso é necessário para que o terminal reconheça as variáveis de ambiente com o caminho para o Composer. Importante: instale o Composer somente depois de configurar seu servidor PHP local. Para certificar-se de que o Composer foi instalado corretamente, abra o terminal de comandos do Windows e execute o comando composer. O resultado deve ser semelhante ao mostrado na Figura 1.4.
Figura 1.4 – Tela inicial do Composer no terminal do Windows com a lista de opções e comandos disponíveis.
22
Laravel para Ninjas
Instalando o Composer no Mac OS X e Linux A instalação do Composer no Unix, Mac OS X e Linux é muito simples. Com os seguintes comandos vamos fazer o download do instalador do Composer e movê-lo para a pasta que permitirá acesso global por meio do terminal de comandos. Use as seguintes instruções no terminal do OS X ou Linux: curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer
Para testar se o Composer está instalado em seu sistema operacional, execute o comando composer no terminal. O resultado deve ser semelhante ao mostrado na Figura 1.5.
Figura 1.5 – Tela inicial do Composer no terminal do Mac OS X com lista de opções e comandos disponíveis.
Se tudo correu bem até aqui, prossiga para os próximos tópicos. Voltaremos a usar o Composer em breve.
Um editor de textos eficiente Um dos propósitos de usar um framework é agilizar o processo de desenvolvimento de software eliminando procedimentos repetitivos e fazendo uso do reaproveitamento de código para maximizar a produtividade. Para atingir esse objetivo também é importante usar ferramentas de desenvolvimento de software
Capítulo 1 ■ Introdução
23
atuais. Nesta seção vou deixar algumas dicas de editores grátis que são populares entre os desenvolvedores de aplicações web. • Eclipse e Aptana Studio17 (IDE completa para Windows Mac OS X e Linux) – O Aptana Studio e o Eclipse são tradicionais no desenvolvimento de software e oferecem suporte a projetos e integração com sistemas de versionamento como Git, bem como a possibilidade da adição de plug-ins e temas. • Atom18 – Simples, leve e elegante editor de textos para Windows, Mac OS X e Linux. Um editor de texto moderno com interface limpa e agradável com várias opções customizáveis, suporte a temas, integração com Git, suporte à edição de múltiplos arquivos etc. • Microsoft Visual Studio Code19 (Windows, Mac OS X e Linux) – Editor de código gratuito da Microsoft com suporte a diversas linguagens, integração com Git, suporte a projetos e bastante leve e agradável de usar. Vem ganhando popularidade entre os desenvolvedores pelas suas boas características. • Sublime Text20 (Windows, Mac OS X e Linux) – Provavelmente o mais popular, porém sua licença não é grátis. Um editor completo, compatível com diversas linguagens de programação, suporte a versionamento, projetos etc. Evite editores WYSIWYG (acrônimo para “o que você vê é o que você tem”) como Adobe Dreamweaver, Quanta Plus, Microsoft Expression Web etc. Apesar de oferecerem certas facilidades, esses editores acabam adicionando código desnecessário. No tipo de projetos que construiremos nos exemplos do livro, um editor de texto simples com bom suporte à linguagem e coloração de código é mais eficiente.
Instalando e rodando o Laravel em seu ambiente local Antes de detalhar a estrutura de pastas, o padrão de design de projeto MVC e os pormenores do Laravel, vamos iniciar simplesmente instalando e rodando o framework no ambiente local. A primeira tarefa é fazer o download do framework; isso será feito por meio do Composer. Abra um terminal (vale o mesmo para todos os sistemas operacionais, Windows, Mac OS X e Linux) e execute o seguinte comando para efetuar o download da versão corrente do Laravel: composer global require "laravel/installer" 17 18 19 20
http://www.aptana.com/products/studio3.html. https://atom.io. https://code.visualstudio.com/download. https://www.sublimetext.com.
24
Laravel para Ninjas
O gerenciador de dependências irá acessar os recursos necessários, baixar para o computador local e atualizá-los se necessário. A Figura 1.6 mostra o resultado dessa etapa no terminal no Mac OS X.
Figura 1.6 – Saída no terminal do OS X para o comando para download do Laravel.
Note que, como já havia feito o download do Laravel para outros projetos recentemente, a versão atual do framework já estava disponível em meu ambiente local, por isso a resposta de que não foi necessário atualizar ou fazer nenhum download. O próximo passo é usar o terminal para criar um projeto chamado olaMundo com o framework; para isso, usando o terminal, navegue até a pasta httpdocs local e execute o seguinte comando: composer create-project laravel/laravel olaMundo
Isso cria o projeto com a versão estável mais atual. Se você preferir especificar a versão do framework, basta acrescentar --prefer-dist ao final do comando da seguinte forma: composer create-project laravel/laravel olaMundo --prefer-dist v5.X.*
Nesse caso, X é a versão escolhida. O Composer irá criar a pasta do projeto, utilizar os arquivos baixados na etapa anterior, instalar o Laravel em ambiente local e checar todas as dependências necessárias para a criação do projeto. Atenção, esse processo pode demorar de alguns segundos a alguns minutos, conforme a velocidade de conexão e a configuração do seu hardware. O resultado no terminal será a listagem de vários módulos instalados. Ao final uma mensagem de sucesso deve ser exibida junto à chave da aplicação. A saída parcial desse comando é mostrada nas figuras 1.7 e 1.8.
Capítulo 1 ■ Introdução
25
Figura 1.7 – Saída parcial do comando de instalação de um projeto com o Laravel utilizando o Composer.
Figura 1.8 – Saída parcial do comando de instalação de um projeto com o Laravel utilizando o Composer.
Se a mensagem Application key [base64:xxxsuaChaveAquixxx=] set successfully for exibida, é sinal de que a instalação ocorreu com sucesso. O próximo passo é iniciar a aplicação. Isso será feito também pelo terminal. Para iniciar a aplicação em ambiente local usaremos o comando serve da seguinte maneira: php artisan serve
A Figura 1.9 mostra a saída da execução desse comando no terminal. Conforme mostrado na saída em tela, ao executar o comando para iniciar a aplicação, o website está disponível para acesso no seguinte endereço local: http://localhost:8000. A Figura 1.10 mostra a página inicial ao acessar o endereço.
26
Laravel para Ninjas
Figura 1.9 – Saída em tela do comando utilizado para iniciar a aplicação do Laravel em ambiente local.
Figura 1.10 – Página inicial da aplicação olaMundo mostrada neste capítulo.
Observe que o endereço local para acessar a aplicação está rodando na porta 8000, não interferindo em nada em outros projetos locais. Também é importante notar que não foi preciso usar a subpasta olaMundo em httpdocs. O comando serve fez isso automaticamente, criando um deploy local. Importante! Os comandos usados no terminal do Mac OS X são os mesmos para o Windows e para o Linux. Ao finalizar esta etapa você deve obter sucesso ao acessar esse website em ambiente local. Caso ocorram erros em qualquer etapa desse processo, corrija o eventual problema até obter sucesso nessas etapas e somente então siga para os próximos capítulos do livro.
Documentação oficial do Laravel O Laravel tem boa documentação cobrindo praticamente tudo o que você precisa saber sobre o framework. Evidentemente a documentação oficial está escrita no idioma Inglês, o que pode ser um inconveniente para alguns usuários. https://laravel.com/docs/5.3
A comunidade Laravel Brasileira é bastante ativa, e a tradução da documentação oficial está disponível no endereço http://laravel.artesaos.org/docs/master.
Capítulo 1 ■ Introdução
27
Além da documentação oficial, o website do Laravel disponibiliza uma série de recursos chamada Ecosystem ou Ecossistema, com os seguintes links: • GitHub – O repositório oficial do Laravel no GitHub21 com vários projetos além do framework. • Envoyer – Um misto de hospedagem com ambiente colaborativo para projetos sugerido pelo Laravel22. • Lumen – Uma versão resumida ‘fast micro-framework’ do framework Laravel23. • Spark – O Spark é uma alternativa de instalação com diversas pré-configurações. A ideia é escolher o diretório, e o Spark se encarregará de todos os detalhes de configuração. • Fóruns – Os fóruns reúnem usuários para troca de conhecimento sobre Laravel. Em inglês24, ou em português25. • Jobs – Oportunidades de trabalho para programadores PHP que conhecem Laravel, apenas nos Estados Unidos, mas com opções de trabalho remoto26. • Podcast – Podcasts em inglês sobre Laravel27. • Slack – O grupo de ‘bate-papo’ oficial do Laravel em inglês28. • Twitter – Conta oficial do Laravel no Twitter29.
Logs e depuração de erros no Laravel Logs de erro são uma ferramenta importante para resolução de problemas. Nos arquivos de log são guardadas mensagens de erro geradas pelos mais variados motivos. Por exemplo, ao tentar carregar um item que não existe, uma série de entradas é adicionada ao arquivo de log. Uma entrada de log inclui a data e a hora em que ocorreram o erro, o tipo do erro ou a exceção, a mensagem principal do erro e a pilha completa do erro. 21 22 23 24 25 26 27 28 29
https://github.com/laravel. https://envoyer.io. https://lumen.laravel.com. https://laracasts.com/discuss. http://slack.laravel.com.br. https://larajobs.com. http://www.laravelpodcast.com. https://larachat.co. https://twitter.com/laravelphp.
28
Laravel para Ninjas
A pasta-padrão onde são gravados os arquivos de log é storage/logs. O nome dos arquivos de log vai variar de acordo com a configuração escolhida no arquivo app.php. A configuração-padrão é um único arquivo de log, conforme a seguinte linha de código: 'log' => env('APP_LOG', 'single'),
Os valores aceitos para a variável log são single, daily, syslog e errorlog. Quando ajustado como single o arquivo de log é salvo como laravel.log; caso seja daily, a data no formato AA/mm/dd é adicionada ao nome do arquivo. Os logs são especialmente importantes quando o website está em produção e as mensagens de erro exibidas são mensagens amigáveis. Ainda no arquivo de app.php é possível alterar o nível de log, ou seja, como as mensagens de erro são apresentadas no navegador quando elas ocorrem. A variável debug pode ser alterada na seguinte linha de código: 'debug' => env('APP_DEBUG', false),
Se o valor de debug estiver definido como false, somente uma mensagem genérica mais amigável será exibida; se o valor estiver definido como true, a mensagem de erro completa será exibida. Note que, além de alterar o arquivo app.php na pasta config, você deve alterar também o arquivo de variáveis de ambiente .env na pasta-raiz da aplicação, alterando a variável APP_DEBUG, da mesma forma, atribuindo o valor true ou false. Importante: ao alterar o arquivo .env é necessário reiniciar a aplicação por meio do terminal de comandos executando o seguinte comando: php artisan serve
Mas, então, quando alterar um arquivo ou outro? Bem, se o arquivo .env existir, os valores inseridos nesse arquivo prevalecerão; se o arquivo .env não tiver a variável APP_DEBUG definida, basta alterar o arquivo app.php na pasta config. Essa mesma regra vale para as demais variáveis no arquivo .env. Dessa forma, você pode preparar o ambiente de produção sem influenciar no seu ambiente de testes, e vice-versa. O exemplo de erro a seguir mostra a mensagem exibida ao tentar carregar uma classe que não existe. [2016-11-20 11:39:27] local.ERROR: exception 'Symfony\Component\Debug\ Exception\FatalErrorException' with message 'Class 'App\Http\Controllers\ Produto' not found' in /Users/agabardo/Documents/httpdocs/olaMundo/app/Http/ Controllers/ProdutosController.php:8
Capítulo 1 ■ Introdução
29
Stack trace: #0 {main}
É possível observar na mensagem que o erro é ocasionado pelo controller ProdutosController.php, na linha 8. A mensagem de erro explicitamente nos avisa que a classe Produto invocada nessa linha não foi encontrada ou não foi incluída corretamente. A Figura 1.11 mostra a mensagem de erro ‘amigável’ e a Figura 1.12 mostra a mensagem de erro completa.
Figura 1.11 – Mensagem de erro genérica quando a variável APP_DEBUG está definida como FALSE.
Figura 1.12 – Mensagem de erro incluindo a classe, a linha e o tipo de erro quando a variável APP_DEBUG está definida como TRUE.
Para o servidor local, além das mensagens de erro exibidas no navegador e dos arquivos de log, você também pode utilizar os logs de erro do servidor PHP. A mensagem de erro mostrada nessa seção aparece da seguinte maneira no arquivo de log do PHP: [21-Nov-2016 08:04:08 UTC] PHP Fatal error: Class 'App\Http\Controllers\ Produto' not found in /Users/agabardo/Documents/httpdocs/olaMundo/app/Http/ Controllers/ProdutosController.php on line 8
Observe que as mensagens são bastante semelhantes e ambas trazem a informação de qual foi o arquivo que ocasionou o erro e qual a linha a ser verificada.
30
Laravel para Ninjas
Essas informações devem prover o básico para que você consiga executar os exemplos do livro. No Capítulo 8 abordaremos testes unitários com o Laravel, oferecendo uma abordagem completa para a manutenção da qualidade do código da aplicação. Também ocorrerão situações em que será necessário limpar o cache e arquivos compilados para que certas alterações tenham efeito. Muitas vezes, após corrigir um problema, a ação somente tem efeito depois que se removem os arquivos de cache e classes compiladas. Os seguintes comandos podem ser úteis durante a depuração: php php php php php
artisan artisan artisan artisan artisan
cache:clear config:clear route:clear view:clear auth:clear-resets
Além de limpar o cache da aplicação com o Artian, ainda podemos usar o Composer para ajustar o autoload por meio do seguinte comando: composer dump-autoload
E também: composer dump-autoload –o
Essas ações garantem que o código executado é o mais recente e você não está vendo código antigo mantido em cache ou arquivos previamente compilados pelo Laravel.
Outros recursos interessantes sobre Laravel A comunidade Laravel é bastante ativa e dinâmica. Encontrar respostas para problemas enfrentados por usuários é relativamente fácil, pois dificilmente você irá passar por alguma situação que nenhum outro desenvolvedor já não tenha passado antes. A comunidade também disponibiliza muito material interessante sobre o framework; apenas é necessário cuidado para diferenciar o que é técnica e o que é gambiarra. Nessa seção listo alguns recursos bacanas sobre Laravel que encontrei desde que comecei a usar o framework. Note que, devido à dinâmica com que a web se modifica, não é possível garantir que todos os links apresentados estejam disponíveis sempre.
Capítulo 1 ■ Introdução
31
• Laravel ‘cheat sheet’ – Para consulta rápida de recursos do framework, https://learninglaravel.net/cheatsheet. • Laravel tricks – Website dedicado a macetes rápidos com Laravel (somente em inglês), http://laravel-tricks.com. • Pacotes de terceiros – Website com centenas de pacotes que podem ser integrados em sua aplicação (somente em inglês), http://packalyst.com. • Pacote Laravel para o Atom – Instale um pacote que vai ajudar a escrever trechos de código-fonte do Laravel: https://atom.io/packages/laravel.