#Laravel Iniciante - Hour Manager - Parte 3
"Simplicity is the ultimate sophistication. - Leonardo da Vinci"
Essa foi a frase de inspiração que estava quando criei a aplicação HourManager, e realmente, concordo com ela. Ao longo do tempo que passamos programando vamos tentando nos aproximar da complexidade, e depois que começamos a entender mais sobre a arte da programação, vemos que na verdade, temos que buscar um código cada vez mais simples. E ai é que está o desafio, simplificar as coisas.
Bem vindos ao terceiro episódio da nossa série de iniciação no Laravel e hoje realmente vamos programar :D.
Vamos começar com a parte mais importante: escolham uma boa música, peguem sua garrafa de café e se isolem do mundo (KKK), vamos começar.
##Configuração de Banco e autenticação
####Banco de dados
Nesse episódio vamos configurar nosso banco e entender alguns conceitos do Laravel. Primeiramente precisamos configurar o banco de dados. Para isso vamos ao arquivo config/database.php
. Esse é o arquivo de configuração de nosso banco de dados.
O Laravel por padrão vem com suporte a diversos bancos de dados, incluindo MySQL e Postgres. Como nossa aplicação será mais simples vamos começar utilizando um banco de dados SQLite apenas.
Para isso vamos editar a linha
'default' => 'mysql',
para
'default' => 'sqlite'
Com isso estamos dizendo ao Laravel que nossa conexão padrão é o SQLite. Mas abaixo nesse arquivo podemos verificar a configuração do SQLite, dentro do array de connections:
'sqlite' => [
'driver' => 'sqlite',
'database' => storage_path().'/database.sqlite',
'prefix' => '',
],
A chave "database" indica a localização do arquivo .sqlite onde iremos salvar as informações, ou seja, precisamos tem o arquivo database.sqlite dentro do nosso storage_path(). Por padrão o storage_path() está localizado na pasta storage na raiz do projeto. Então vamos criar nosso arquivo de banco de dados:
touch storage/database.sqlite
Com isso criamos um arquivo vazio nessa pasta e finalizamos nossa configuração de banco de dados.
####Migrations
Migrations são arquivos de código que representam operações na estrutura do Banco de dados. Se você já mexeu com outros frameworks esse conceito deve ser familiar, porém se você está vindo do início deve ficar pensando: WTF?? Para que isso? Basta eu usar o meu MySQL Workbench e pronto não?!?
Sim, é possível fazer assim, porém quando criamos um arquivo de migração ele estará dentro do nosso controle de versões (VCS - será abordado em outra série) e representa um ponto na história do nosso projeto. É uma maneira de dizer que "no momento em que nosso projeto estava assim, nosso banco possuia as seguintes tabelas."
A maior vantagem das migrations entretanto está no fato de podermos aplicá-las gradativamente ao projeto, ou seja, temos uma forma rápida e fácil de aplicar e controlar as alterações no banco de dados. Descobrimos que em certo momento precisamos de uma coluna? Criamos uma migração, desenvolvemos a alteração e enviamos para nosso servidor de produção. Lá, rodaremos a migração também e nosso banco será alterado.
Sem falar na questão da facilidade de deploy, que ficará para um próximo episódio.
Mas voltando ao nosso HourManager podemos verificar que na pasta database/migrations
temos dois arquivos:
2014_10_12_000000_create_users_table.php
2014_10_12_100000_create_password_resets_table.php
Esses são arquivos de migração que já vem com o framework para um rápido scaffolding da nossa aplicação. Servirão para nos ajudar com o registro e autenticação que faremos em instantes. Vamos abrir o arquivo 2014_10_12_000000_create_users_table.php
.
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
}
Podemos verificar duas funções nesse arquivo: up
e down
. A função UP representa a migração para frente, ou seja, para evoluir o banco (criação de uma tabela, alteração de uma coluna, exclusão de uma coluna). Já a função DOWN representa a operação para desfazer a função UP, por exemplo, se criamos uma coluna na função UP, devemos excluí-la na função DOWN.
Vamos executar as migrações que vieram com a instação do Laravel. Para isso devemos executar o seguinte comando na pasta /home/vagrant/HourManager
dentro da VM.
php artisan migrate
Veremos o seguinte retorno:
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Isso significa que nossas migrações foram rodadas corretamente.
Para verificarmos podemos usar o navegador do sqlite que vem junto com o Homestead.
sqlite3 storage/database.sqlite
Estaremos então no navegador do SQLite. Vamos verificar se nossas tabelas foram criadas:
.tables
Isso deverá nos mostrar a tabela users, password_resets e migrations.
Para sair do navegador SQLite basta utilizar a combinação CTRL+d
.
Vamos então testar o comando inverso, ou seja, o de desfazer uma migração:
php artisan migrate:rollback
Teremos a seguinte resposta:
Rolled back: 2014_10_12_100000_create_password_resets_table
Rolled back: 2014_10_12_000000_create_users_table
Isso significa que nossas tabelas foram excluídas. Para isso vamos verificar novamente no navegador SQLite:
sqlite3 storage/database.sqlite
.tables
Devemos ver apenas a tabela migrations, indicando que as demais foram destruídas.
Vamos rodar mais uma vez nossa migração para continuarmos nosso tutorial:
php artisan migrate
Perceberam que criamos, destruímos e recriamos nosso banco com 3 comandos APENAS?!?!. Esta ai outra vantagem das migrações.
####Autenticação
Nosso querido Laravel já vem com componentes de autenticação e registro prontos para que possamos utilizar rapidamente a aplicação, o que será muito útil nesse nosso tutorial de iniciação.
Para acessar nosso formulário de registro iremos até a url:
hourmanager.app/auth/register
Veremos um formulário de cadastro. Por hora não iremos nos aprofundar no funcionamento desse formulário, isso ficará para o futuro, vamos apenas preencher os campos corretamente e clicar em Register. Nesse momento seremos redirecionados para a página inicial, indicando que nos registramos e fizemos nosso Login.
Para verificar isso vamos até a barra superior, clicamos no nosso nome e no botão Logout. Seremos redirecionados até a página inicial. Vamos então navegar até a url:
hourmanager.app/home
Nesse momento seremos redirecionados para a página de login, pois tentamos acessar uma área protegida do site sem estarmos logados. Preenhendo o formulário de login com os dados cadastrados anteriormente e clicando em Login seremos redirecionados para a página inicial, indicando que a autenticação de nossa aplicação já está funcionando. :D
Finalmente começamos a "programar", apesar que pouco. Nesse episódio configuramos nosso banco e aprendemos um pouco sobre as migrações, além que colocamos para funcionar nosso registro de usuários e também o login.
No próximo artigo iremos limpar nossa página inicial e criar nosso registro de horários. Não percam :D.