Laravel 5

Laravel 5.2 lançado, veja as novidades

A mais nova versão do Laravel foi  lançada finalmente. Nessa versão 5.2 tivemos diversas melhorias e algumas novidades, veja abaixo algumas delas:

Drivers múltiplos para autenticação

Nas versões anteriores do Laravel, somente era possível ter um único model para autenticação do usuário. Agora é possível ter mais de um, é possível ter tabelas diferentes para perfis diferentes como admin e usuário por exemplo.

(mais…)

Laravel 5.1 foi lançado

Laravel 5.1 LTS lançado, veja algumas das novidades

A tão esperada versão 5.1 do Laravel foi finalmente lançada, como não podíamos deixar passar, veja a lista abaixo de algumas das novidades dessa nova versão:

LTS

Long Term Support significa que o framework receberá correções de bugs por 2 anos e correções de problemas de segurança por 3 anos, isso trará uma maior confiabilidade para que as pessoas comecem a investir no framework.

(mais…)

Doctrine ORM

Integrando o Doctrine ORM e Laravel 5 [parte-1]

Fala galera, estou a um tempinho sem escrever nada, vida corrida, faculdade e tudo mais, porém trago a vocês hoje um breve tutorial de como integrar o Doctrine ao Laravel 5, vamos nessa!

O que é o Doctrine ?

Antes de mais nada gostaria de falar um pouco sobre o projeto Doctrine. O Doctrine é um conjunto de vários projetos para se trabalhar especificamente com banco de dados, sejam ele relacionais como o MySQL e PostgreSQL ou não relacionais como o MongoDB.

A grande vantagem de se usar suas bibliotecas é o ganho de abstração, facilmente você pode trocar entre bancos sem problema nenhum, e caso você use o Doctrine ORM, você pode recriar a estrutura do seu banco de dados a partir de suas classes mapeadas, e como de é de se esperar, você não precisará escrever diretamente nenhum comando SQL.

Por que usar o Doctrine no Laravel se já existe o Eloquent ?

Dado uma breve explicação do que é o Doctrine, e caso você já conheça ou trabalhe com o Laravel, provavelmente você vai se perguntar, por que diabos eu usaria o Doctrine se o Laravel vem com o Eloquent por padrão? Bem, para dizer a verdade tudo depende, no meu caso por exemplo um dos maiores motivos de usar o Doctrine inicialmente foi o suporte ao banco de dados Sybase, contudo, e com o tempo, percebi que o Doctrine estava muito mais avançado do que o Eloquent, o que não é de se estranhar já que o Doctrine é um conjunto de bibliotecas dedicadas para um único propósito, além de ser um projeto mais antigo que o próprio Laravel, e com uma gama muito maior de projetos que o utilizam, abaixo eu listo algumas poucas vantagens que eu identifiquei no Doctrine ORM especificamente:

  1. Suporte a um número maior de banco de dados relacionais e não relacionais
  2. Possibilita tornar um banco relacional, um banco orientado a objetos
  3. Cria uma portabilidade da estrutura do seu banco de dados através do mapeamento de classes
  4. Maior gama de projetos que o utilizam, exemplo: Symfony

Integrando no Laravel

Obs.: Não estarei aqui mostrando inicialmente grandes detalhes de como utilizar o Doctrine, mas para os interessados existe um tutorial no site do projeto disponível neste link.

Mãos na massa

Como de praxe vamos criar um novo projeto usando o composer, considerarei que você já o possui instalado, caso não, sugiro ver esse post, após tudo instalado, execute o seguinte comando:

    composer create-project laravel/laravel --prefer-dist tutorial-doctrine

Isto criará uma pasta chamada “tutorial-doctrine”, fará o download do Laravel e fará a instalação de suas dependências.

A seguir precisaremos adicionar a dependência do Doctrine ORM, para isso execute o comando abaixo no terminal, na pasta que acabou de ser criada.

    composer require doctrineorm ~2.5

Após o termino da instalação, crie um arquivo chamado “cli-config.php” na pasta raiz do projeto. Esse arquivo basicamente fará a configuração e possibilitará o acesso via console das funcionalidades do Doctrine. Depois disso copie o código abaixo para o arquivo:

Agora precisaremos criar um ServiceProvider, ou uma classe que dará acesso ao EntityManager do Doctrine, para isso execute o comando abaixo na raiz do projeto.

    php artisan make:provider DoctrineServiceProvider

Isto criará um novo arquivo em “app/Providers”, agora copie o código abaixo para o arquivo.

Obs.: O código está comentado e caso necessitem tirar alguma dúvida, por favor escrevam nos comentários estarei atendendo o quanto antes for possível.

Agora para testarmos vamos alterar o arquivo de configuração de conexão com banco de dados do Laravel em “configdatabase.php”. Basicamente precisamos alterar duas coisas: mudar o valor da posição “default” para “sqlite” e alterar o driver da posição “sqlite” na lista de conexões de “sqlite” para utilizar o “pdo_sqlite”, que é o driver do Doctrine para se trabalhar com o SQLite.

Por fim apenas execute o comando abaixo para criar o arquivo do banco de dados na pasta “storage”.

    touch storage/database.sqlite

Finalmente vamos rodar um comando do Doctrine para verificar se está tudo certo.

    vendorbindoctrine orm:validate-schema

Caso esteja tudo certo será impresso no terminal uma mensagem dizendo que está tudo OK.

Bem pessoal, essa foi um introdução da integração do Doctrine com o Laravel 5, aguardem os próximos posts, segam-nos nas redes e até a próxima o.

Laravel 5

Laravel 5 do começo ao fim [parte 4]

Neste post veremos uma peça fundamental de um workflow que tento sempre seguir, o famoso “TDD”, que em tradução livre ficaria algo como “Desenvolvimento Orientado a Testes”, que seria a parte de teste com Laravel 5, caso não tenha visto, veja outras partes dessa série nos links abaixo:

Algo que muitos programadores simplesmente ignoram, seja por preguiça ou qualquer outro motivo obscuro, é a parte de automação de testes. Muitos ainda utilizam a velha prática de testar na mão as funcionalidades do software, porém isto não é algo recomendado uma vez que existem grandes chances de você simplesmente esquecer de realizar algum teste importante de alguma funcionalidade, além de claro, esse processo é extremamente maçante e sinceramente  desnecessário ser realizado por mentes humanas.

O objetivo dos testes basicamente é encontrar falhas, através da execução de funções ou conjunto de funções do software, comparando os resultados obtidos das execuções dessas funções com resultados previamente conhecidos.

Existem diversas ferramentas disponíveis para a automação de testes no PHP, algumas possuem um nível extremamente detalhado de definição dos testes a serem realizados, outros são mais “simples” de serem usados, podemos citar aqui algumas como o PHPUnit, Behat, PHPSpec, entre outros.

O Laravel, assim como praticamente todo framework que se prese, prevê que o usuário programador teste seu programa. Para isto ele utiliza de fábrica basicamente duas ferramentas, o PHPUnit, muito comumente utilizado, e o PHPSpec, outra ferramenta muito boa que cheguei a utilizar bastante e possui um conceito muito interessante de teste, contudo por ser considerado um padrão no mundo PHP utilizaremos o PHPUnit, uma ferramenta para testes unitários.

Mãos na massa

Vamos primeiramente dar uma olhada nos arquivos de testes que já vêm junto com o Laravel.

Na raiz do projeto você verá que existe uma pasta chamada “tests”, como é de se esperar esta pasta contém todos os arquivos de testes do seu projeto.

Inicialmente você verá dentro desta pasta basicamente dois arquivos: “ExampleTest.php” e “TestCase.php”, abra o primeiro arquivo, você verá algo como o mostrado abaixo.

Como podemos ver, neste arquivo existe uma classe chamada “ExampleTest”, uma classe de exemplo que vem por padrão na instalação do laravel, essa classe estende de outra classe chamada “TestCase”, a classe da qual todos seus testes devem estender, que está no outro arquivo presente nesta mesma pasta.

Observação : Abaixo citarei alguns padrões utilizados pelo PHPUnit, para mais informações e maiores detalhes do framework de testes, visite sua página oficial aqui

Antes de mais nada, vamos esclarecer algo, uma boa prática para testes responde o que é provavelmente uma das dúvidas que fica nas pessoas sobre o tema, “O que afinal devo testar ?”, por via de regra você deve testar TODAS as funcionalidades do seu sistema para ter certeza que está tudo funcionando. Uma outra dúvida que também pode estar presente é como testar, por via de regra você deve tentar ao máximo simular o usuário, tente testar as operações da maneira como o usuário ou o programador as utilizaria e com os resultados que eles esperariam.

Continuando, na classe “ExampleTest”, existe uma função chamada “testBasicExample”, sem entrar em maiores detalhes do que está sendo feito por trás, apenas observando os nomes das funções usadas, podemos deduzir que na primeira linha está sendo feito uma chamada para a URL “/” com o método “call”, usando o verbo GET que vimos no post anterior, e logo após na linha seguinte está sendo verificado.

No PHPUnit, é uma boa prática, porém não é obrigatório criar uma classe de testes para cada classe do seu projeto, usando o sufixo “Test”, e todas as funções de teste ou tem o prefixo “test” no nome ou possuem a tag @test como comentário antes da função para serem reconhecidas pelo PHPUnit, além disso os métodos ou funções de verificação de valor tem o prefixo “assert” que em inglês significa “afirmar”, ou seja, você está afirmando que o valor de resultado da função passada como parâmetro corresponde ao outro valor passado como parâmetro, testar é isso, você passa uma função e compara se o valor retornado é o que você esperava.

Vamos alterar essa função para verificar se nossa rota de tarefas está funcionando, mude o código para o mostrado abaixo:

$response = $this->call('GET', '/tarefa');

Por fim, é necessário que o PHPUnit execute nossos testes, vá com o terminal na pasta raiz do projeto e execute o seguinte comando:

vendor/bin/phpunit

Basicamente o PHPUnit carrega as configurações do arquivo “phpunit.xml” na pasta raiz e procurará todos as funções de testes presentes na pasta “tests”, executando-as. O resultado mostrado esperado é que não ocorra nenhum erro, e portanto uma mensagem como “OK (1 tests, 1 assertions)” em verde deve ser mostrada.

Bem pessoal a parte de testes com o PHPUnit é bastante extensa, não espero abranger tudo num único post, contudo caso queiram mais detalhes peço que vejam a documentação oficial do PHPUnit, ela é bastante abrangente, e pelo amor das minhas linhas de código TESTEM SEUS PROGRAMAS!!!, até a próxima o.

Logo Lumen

Lumen um micro-framework baseado no Laravel

O tão esperado Lumen foi finalmente lançado, um projeto baseado no Laravel 5 e que segue a mesma linha dos micro-frameworks Silex e Slim, porém, segundo alguns benchmarks, com desempenho superior. Veja abaixo como começar a usar este micro-framework:

Para criar um projeto execute:

composer create-project laravel/lumen --prefer-dist

Para vê-lo rodando pela primeira vez execute:

php artisan serve

O Lumen adota alguns dos padrões usados no próprio Laravel 5, veja nosso tutorial disponível nos links abaixo e comece agora mesmo a usá-lo, aguardem maiores novidades!

Laravel 5

Laravel 5 do começo ao fim [parte 3]

Fala pessoal, hoje veremos finalmente a parte de Model e View do laravel 5, caso você não esteja familiarizado com o conceito de MVC veja as outras partes dessa série nos links abaixo:

Considerando que anteriormente na parte 2 criamos um controller chamado TarefaController, criaremos agora o Model Tarefa que representará os registros da tabela Tarefa.

Execute o comando abaixo na raiz do projeto para criar um novo Model:

php artisan make:model Tarefa

Esse comando criará basicamente duas coisas, o Model propriamente dito no diretório app/ e criará uma nova migration em database/migrations. Vamos antes de mais nada adicionar alguns campos a nossa migration.

Abrindo o arquivo de migration criado (algo como create_table_tarefa) você verá basicamente uma classe que estende de outra classe chamada Migration, e dois métodos up e down como já explicado anteriormente, edite esse arquivo para ficar como abaixo:

Basicamente adicionamos dois novos campos a migration, titulo e corpo das nossas tarefas, além disso o comando make já nos adiciona um campo chamado id do tipo inteiro para ser nossa chave primária com auto incremento, ou seja, sempre que for adicionado um novo registro não é preciso setar o campo id, pois esse é gerado pelo banco. E no final são adicionados os campos created_at e updated_at que como você provavelmente deve suspeitar um é a data e hora de criação e o outro da última atualização respectivamente, sendo o tipo normalmente timestamp para esses dois campos. Feito a adição dos campos vamos migrar nosso banco para que ele crie a tabela com o comando abaixo:

php artisan migrate

Obs.: Estou considerando que você viu as outras partes dessa série, porém caso ocorra algum erro normalmente podem ser duas coisas, configuração incorreta do arquivo .env na raiz do projeto ou provavelmente você não executou o comando

php artisan migrate:install

para criar a tabela de migrations no banco. Com o comando executado com sucesso temos certeza que a tabela foi criada com os devidos campos, com isso podemos partir para o Model propriamente. Abra o arquivo chamado Tarefa.php no diretório app/, nesse arquivo está presente uma classe chamada Tarefa que estende da classe Model, a classe base do Eloquent para criar models. Nesse ponto apenas para facilitar adicionaremos os campos de nossa tabela numa variável da classe chamada $fillable como mostrado abaixo:

protected $fillable = array('titulo', 'corpo');

Na documentação do laravel disponível aqui isso disponibilizará essas colunas como Mass Assignment que possibilitará criar novos registros simplesmente usando o método create e outros da classe Model passando um array associativo as colunas da classe, como no exemplo abaixo:

$tarefa = Tarefa::create(['titulo'=>'Título da tarefa','corpo'=>'Corpo da tarefa...']);

Pois bem, uma vez adicionado as colunas a essa variável podemos partir para o controller e também criar nossas Views. Vamos então criar um novo arquivo chamado index.blade.php no diretório resources/views/tarefa, que fará a listagem das nossas tarefas, como mostrado abaixo:

Observem que não estou entrando em grandes detalhes, pois a própria documentação do laravel é suficiente para estudos mais profundos.

Agora que temos nossa view de listagem precisamos enviar os dados para ela, lembre-se no MVC a View tem a única responsabilidade de mostrar dados passados pelo controller, portanto no nosso TarefaController na função index vamos adicionar o seguinte código:

$tarefas = Tarefa::orderBy('id')->get();
return view('tarefa.index',compact('tarefas'));

Isso passará um objeto chamado Collection padrão do laravel para representar uma coleção, essa Collection possui diversas funções interessantes que você pode verificar na documentação ou na API do laravel no site.

Para ter certeza que nenhum erro está ocorrendo, execute o comando php artisan serve e acesse o endereço http://localhost:8000/tarefa.

Obviamente nesse momento como não temos nenhuma tarefa cadastrada nada será mostrado, vamos então criar um formulário para cadastro de tarefas.

Primeiramente crie um novo arquivo chamado create.blade.php na mesma pasta tarefa onde está localizado o arquivo index, dentro desse arquivo virá nosso formulário com os campos para cadastro.

Apenas algumas considerações, para criarmos formulários no laravel poderíamos utilizar a classe utilitária Form que no laravel 5 não vem por padrão, porém optei por usar dessa forma por simplicidade no entendimento. O campo _token precisa ser coloca pois o laravel possui um tratamento de ataque de CSRF, que basicamente é evitar que alguém mal intencionado consiga realizar requisições POST,PUT e DELETE de fora do site. Por fim estou usando a classe helper URL para me retornar a URL completa para o método store do controller TarefaController. O método store do controller fará o cadastro efetivamente, ficando da seguinte forma:

Isso criará uma nova tarefa e redirecionará para a página de index do controller.

Bem pessoal esse foi um exemplo usando Model, View e Controller, claro que é um exemplo apenas ilustrativo, faltaria outras funcionalidades, porém peço que para informações mais profundas sempre tenham em mãos a documentação do laravel, lembre-se que ela é sua bíblia, estarei na próxima parte mostrando um pouco sobre a parte de testes do laravel e um exemplo de workflow muito utilizado atualmente que é o TDD ou Desenvolvimento Dirigido por Testes em tradução livre, escrevam nos comentários o que acharam e até a próxima pessoal.

Laravel 5

Laravel 5 do começo ao fim [parte 2]

Esta é a segunda parte do tutorial sobre Laravel 5, caso você não tenha ainda visto, veja a primeira parte dessa série neste link.

Continuando o tutorial vamos agora partir para a parte MVC do framework, o laravel assim como a maioria dos frameworks utiliza esse conceito, veja abaixo uma tabela explicativa:

Model = Camada que faz a interface com as tabelas do banco de dados
View = Camada de visualização propriamente
Controller = Camada que faz a ligação entre “M” e “V”

Mão na massa

Vamos antes de mais nada criar nossas rotas, afinal, são através delas que nossas funções serão disponibilizadas, o arquivo de rotas fica em app/Htpp/routes.php, caso você não conheça o protocolo HTTP, abaixo vai uma tabela rápida de contextualização de alguns métodos.

GET Método de chamada padrão utilizado para requisitar um recurso do servidor.
POST Método de chamada utilizado para enviar dados de inserção no servidor
PUT Método de chamada utilizado para enviar dados de atualização no servidor
DELETE Método de chamada utilizado para enviar dados de exclusão no servidor

Existem outros métodos do protocolo HTTP, porém estes são normalmente os mais utilizados.

Abrindo este arquivo, você verá que basicamente está sendo chamado a classe Route que é a classe que cria as rotas no laravel, com algumas rotas já definidas, na documentação do laravel disponível neste link você verá todas as possibilidades de rotas, para este exemplo vamos fazer uma lista de tarefas com as seguintes rotas:

Método HTTP Caminho Descrição
GET /tarefa Listagem de todas as tarefas
GET /tarefa/create Formulário de cadastro
GET /tarefa/edit Formulário de edição
POST /tarefa Ação de cadastrar efetivamente
PUT /tarefa Ação de atualizar efetivamente
DELETE /tarefa Ação de excluir efetivamente

Para criar estas rotas precisamos simplesmente adicionar a seguinte linha no arquivo routes.php:

Route::resource('tarefa', 'TarefaController');

Conforme a documentação do laravel, este comando cria rotas para um serviço RESTful, a lista completa das rotas geradas e outras formas de rotas você pode ver neste link.

Lembrando apenas que ainda não criamos nosso controller, para isso precisamos executar o seguinte comando no terminal na raiz do projeto:

php artisan make:controller TarefaController

Um arquivo chamado TarefaController.php será criado no diretório app/Http/Controllers. Abrindo este arquivo podemos ver que foi criado uma classe “esqueleto” para nós já com todos os métodos necessários. Para provar que não estou mentindo e que tudo está funcionando adicione a seguinte linha no método index dessa classe:

return 'Olá Mundo com Laravel 5';

Depois execute no terminal o seguinte comando:

php artisan serve

Isso iniciará o servidor de testes do laravel na porta 8000 da máquina atual, portanto acesse o endereço http://localhost:8000 para ver a página inicial do laravel, agora acessando o endereço http://localhost:8000/tarefa que chamará via método GET a rota /tarefa que está associado ao controller TarefaController pelas nossas rotas no método index() e portanto o texto “Olá Mundo com Laravel 5” deve ser exibido na tela.

Pois bem, galera esse tutorial vai ficar grande e estou separando em mais partes, na próxima parte mostrarei a parte de Models e Views e, por fim, parte de testes com os novos recursos do Laravel 5, espero que estejam gostando, aguardem pelas próximas postagens.

Laravel 5

Laravel 5 do começo ao fim [parte 1]

Mostrarei a seguir um breve tutorial sobre o Laravel, um dos frameworks mais usados atualmente para PHP, com o lançamento do Laravel 5 houve algumas mudanças, e algumas delas você verá a seguir.

Instalação

Composer

Inicialmente caso já não o tenha, faça a instalação do composer, o composer é um controlador de dependências, o laravel assim como a maioria dos frameworks atuais o utilizam, o site do composer que pode ser acessado por este link mostra como fazer a instalação.

Criando um novo projeto

O comando abaixo criará um projeto novo do laravel 5 usando o composer e fará a instalação das dependências:

composer create-project laravel/laravel --prefer-dist

Uma vez instalado você verá uma lista de pastas, abaixo coloco uma breve descrição do que existe em cada uma:

app/
Diretório dos arquivos da sua aplicação

bootstrap/
Arquivos de inicialização, são chamados em cada requisição ao servidor

config/
Arquivos de configuração como banco de dados, serviços, etc.

database/
Aqui existem basicamente duas pastas,  “migrations” que guardam os arquivos que fazem as alterações na estrutura do banco, como nome das tabelas, colunas, etc, e “seeds” que seriam arquivos e classes que geram registros no banco de dados, seja para testes ou para possuir informações iniciais de utilização.

public/
São os arquivos públicos do sistema, normalmente é aqui que são colocados os arquivos de imagens, CSS e JS.

resources/
Arquivos de recursos como bibliotecas JS e CSS, arquivos com arrays de traduções de mensagens, normalmente usados numa aplicação multilinguagem e as próprias views do sistema.

storage/
Arquivos de cache, sessões (quando usado armazenamento em arquivo), views compiladas e logs.

tests/
Arquivos de testes do sistema.

vendor/
pasta criada pelo composer para controle e versionamento de bibliotecas.

Configuração

Banco de Dados

O arquivo de configuração de banco de dados está na pasta config/database.php, abrindo esse arquivo você perceberá que ele basicamente retorna um array, o laravel permite a utilização de vários bancos, você pode se conectar e utilizar diferentes conexões para diferentes bancos, inclusive mais de uma, porém para esse tutorial utilizarei apenas o banco mysql, que inclusive vem configurado por padrão.

Neste ponto já se percebe uma mudança de versões anteriores do laravel, os valores de host, database, username, password estão vindo de variáveis de ambiente, isto permite uma maior flexibilidade, pois você pode ter diferentes valores para produção e teste, estas variáveis são carregadas a partir do arquivo “.env” que está localizado na raiz do projeto, apenas observando que no linux todo arquivo que inicia com “.” fica oculto, então se por acaso o arquivo não estiver aparecendo vá ao terminal e na raiz do projeto e execute um “nano .env” que se abrirá o arquivo no nano para edição.

Altere as informações do arquivo .env com as informações do seu banco.

Artisan

O Laravel utiliza o artisan como programa de linha de comando para execução de algumas tarefas digitando o comando abaixo na raiz do projeto você verá diversos comandos possíveis e uma breve explicação do que cada um faz.

php artisan list

A maioria dos comandos é quase autoexplicativa mas não entrarei em grandes detalhes nesse tutorial, como fizemos a configuração do banco de dados no item anterior podemos verificar a instalação com o comando abaixo.

php artisan migrate:install

Este comando criará uma tabela no banco chamada“migrations” que o laravel utiliza para verificar quais migrações foram executadas e quais não, apenas deixando mais claro, na prática uma migração é um arquivo que fica localizado em database/migrations e faz alterações no banco, como criar e alterar tabelas, mudar nomes de bancos, etc, e isto vale para qualquer banco que o laravel tem suporte, você pode por exemplo recriar toda a estrutura do seu banco ou até mesmo atualizá-la de maneira automática, podendo também regredir essas alterações, pois cada migration tem basicamente dois métodos, up e down, que como o nome sugere, o primeiro realiza as alterações e o segundo desfaz, apesar disso ser responsabilidade do programador considero como algo bastante útil quando se está trabalhando com bases em produção pois você conseguirá criar pacotes de atualização e caso ocorra qualquer problema podes desfaze-las.

Após executar o comando a mensagem “Migration table created successfully” deve ser exibida, do contrário, possivelmente algum parâmetro foi passado errado no arquivo “.env.

O Laravel 5 em especial já vem sua parte de autenticação pré-criada, mas para utilizá-la precisamos migrar o servidor para que as tabelas sejam criadas com o seguinte comando:

php artisan migrate

Com isso aparecerá no terminal que duas migrações foram instaladas, a create_users_tables que cria a tabela de usuários, e a create_password_resets_table que cria a tabela de reset de senhas.

Com isso podemos executar o comando seguinte para iniciar o servidor de testes do php por um atalho do artisan

php artisan serve

Acessando o endereço http://localhost:8000, aparecerá a página de bem-vindo do laravel, escrito Laravel 5 num tom quase branco, horrível e de muito mal gosto por sinal, e entrando no endereço http://localhost:8000/home, aparecerá a tela de login e registro padrão, algo que provavelmente você perderia um bom tempo em outros frameworks, vem pronto para ser utilizado aqui.

Bem pessoal, essa foi a primeira parte do tutorial sobre laravel, aguarde a próxima parte e comentem caso tenham gostado, vlws o/.