PROGRAMAÇÃO WEB - PARTE 2 [desenvolvimento... UPDATE 9]
Autor: Ciência da Computação - JokerHat | Publicado: 2016-03-12T19:57:00-03:00






 










Com este post iremos ver alguns rascunhos sobre desenvolvimento de aplicações para web utilizando o framework LARAVEL 5.2.





Já conhece o editor Open Source&nbsp; da Adobe, o Breckets? Experimenta aí: http://brackets.io/


Simples e leve. Depois experimente o portable Sublime Text 2 









&nbsp;





ÍNDICE:1. Ambiente de desenvolvimento2. Criando um controller3. Criando um view4. Criando um model

5. Autentificação

6. Envio Email
7. Packages (instalando e criando pacotes) 

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;

AMBIENTE DE DESENVOLVIMENTO



LARAVEL 5.2



1. Baixe a ultima versão do Laravel (5.2): https://github.com/laravel/laravel

2. Descompacte em qualquer lugar.



CONTROLADOR DE VERSÃO



1. Baixe o tortoise SVN: https://tortoisesvn.net

2. Documentação: https://tortoisesvn.net/docs/ 

3. Instale normalmente o Tortoise SVN e reinicie seu computador para que seja aplicado o que foi instalado.

4. Para um melhor exemplo de suas funcionalidades e demais paradigmas: 
https://www.youtube.com/watch?v=ddsT-NiGHrU 





Agora vamos criar o repositório que conterá o projeto.



1. CRIANDO O REPOSITÓRIO: esta pasta conterá arquivos do tortoise SVN. Dentro desta pasta você poderá incluir diversos projetos. Ou seja, esta pasta representa o repositório dos projetos. Em outras palavras pode ser entendido como o servidor de versionamento de código. Os clientes irão acessar esta pasta em outras maquinas remotas ou local.



Escolha um local para ficar a pasta de repositórios. Há pessoas que deixam na raiz, outros em meus documentos. Não importa o local, desde que você saiba onde esta e seja acessível para demais usuários. 



Crie uma pasta no local escolhido. Dê qualquer nome a ela ou como "Repositorio". Crie outra pasta e dê o nome do projeto ou como "Pojeto_1". Dentro desta pasta com o nome do projeto, crie outra pasta chamada "trunk".

Obs: Para outros projetos que for criar e desejar implementar o controle de versão, crie outra pasta com o nome do projeto ou Projeto_2, e assim por diante.


Após criar a pasta com o nome do projeto, clique com o botão direito do mouse e escolha a opção TORTOISESVN/CREATE REPOSITORY HERE.



Agora, vá até a pasta do laravel onde descompactou, que provavelmente tem o nome de "laravel-master". Dentro desta pasta clique com o direito do mouse e escolha a opção TORTOISESVN/IMPORT...



Na janela que se abrirá escolha o local onde esta o Repositorio/Projeto_1/trunk.





Clique em Ok. E aguarde a passagem de arquivos para a pasta no repositório.

Ao terminar, se desejar excluir a pasta laravel-master, a qual vc descompactou, esteja a vontade. Você não irá mais precisar dela. Pelo menos não para este projeto.





Obs: caso queira visualizar a pasta do repositório e por ventura perceber que a pasta esta vazia. Teoricamente não esta. Fique tranquilo.



Vamos agora ao próximo passo.

CONFIGURANDO O SERVIDOR



1. Baixe o WampServer: http://www.wampserver.com/

2. Instale-o normalmente.

3. Não se esqueça de fazer um teste. O ícone dele deve estar verde. Caso sim, etá tudo ok. Caso não o problema pode estar relacionado com a porta 80. Você poderá estar mudando esta porta ou desativando o serviço que esta utilizando esta porta, como o skype. Pesquise na internet caso encontrar o erro. Para este caso comigo não houve problemas, mas já passei por isso.



Entre na pasta do WampServer e crie uma pasta referente ao projeto que irá trabalhar, como: c:\wampserver\www\projeto_1. Dentro desta pasta, clique com o botão direito do mouse e escolha a opção SVChekout.



Desta maneira iremos exportar o conteúdo do repositório para dentro desta pasta no wmapserver. Uma janela se abrirá de forma que poderemos escolher qual projeto queremos resgatar. Escolha o Projeto_1, ou o nome que você tenha dado.

Obs: Este é o procedimento de exportar o conteúdo do repositório para um determinado local no computador local ou remoto. É desta forma, por exemplo, que passamos os projetos aos computadores dos usuários de uma equipe. O conteúdo incluirá todos dos comits, ou seja, desde o primeiro conteúdo até sua ultima modificação.







Clique em ok. Aguarde o export.

Ao terminar, seus arquivos se parecerão com a imagem abaixo:









Note que temos indicadores verdes. Quando estivermos trabalhando serão vermelhos até o próximo comit (atualização). Para estas e outras indicações basta você ler a documentação do Tortoise SVN.





O próximo passo é instalar o laravel.

A instalação no windows é mais simples. Basta baixarmos o executável e informarmos o php.exe do wampserver que tudo é instalado automaticamente, principalmente a variável de ambiente composer.
Em servidores linux você precisa configurar a variável de ambiente, caso queira usar sem a necessidade de importar para toda pasta de projeto o composer.phar.





INSTALAÇÃO DO LARAVEL NO WINDOWS 



1. Baixe o Composer.exe, arquivo necessário de utilidade com o laravel: https://getcomposer.org/Composer-Setup.exe

2. Instale normalmente. Ao pedir o php.exe informe o local no wampserver. Por default o local é: C:\wamp\bin\php\php5.5.12\php.exe



3. Após instalado o Composer.exe, abra o CMD (command) do SO Windows em menuIniciar/todos os programas/Acessórios/Prompt de Comando. Caso for Windows 10, basta clicar no menu iniciar (Winkey) e digitar cmd no campo de busca. Ou use a hotkey Winkey+R (executar). Digite no campo da janela que apareceu "cmd", e clique em ok.

4. No cmd, você deverá entrar na pasta do projeto no wampserver/www/projeto_1. 

Para isso, vá ao diretório raiz com "cd \". E entre na pasta do projeto "cd wamp\www\projeto_1"







Dentro desta pasta, digite composer. Irá listar o help do aplicativo. Note as possibilidades que poderemos estar executando em linha de comando.







Nós iremos usar o comando "composer install". Desta forma, iremos instalar as dependências necessárias para que o laravel possa operar normalmente. Faça isso. Poderá levar alguns minutos, não precisa se preocupar ao pensar que travou (risos). Além disso, você também precisa estar conectado à internet, os repositórios das dependências de arquivos, é do github.

Bom, por meio do composer instalamos o laravel. Esse processo se repete para todo projeto em laravel que for desenvolver. Além disso temos um utilitário do laravel chamado artisan. Por meio dele controlamos os arquivos e demais necessidades que poderemos usar durante o desenvolvimento de aplicações web com este framework.
Já viu isso? Interessante né?





INTERFACE DE DESENVOLVIMENTO


Ou conhecida como IDEs (Interface de ambiente integrado). Trata-se de uma ferramenta de apoio ao desenvolvimento de sistemas para computador que permite a criação e edição de arquivos escritos em determinada linguagem. Existem várias IDEs proprietárias e não proprietárias para diversas linguagens de programação. Para web destacam-se as gratuitas:

1. Aptana: http://www.aptana.com/

2. BlueFish: http://bluefish.openoffice.nl/index.html

3. Brackets: é o editor open source da Adobe http://brackets.io/

4. Geany: várias linguagens http://www.geany.org/

5. NetBeans: https://netbeans.org/. Esta IDE possui o subversion e da suporte a varias linguagens.

6. Eclipse: https://eclipse.org/

7. Sublime Text 2:&nbsp; http://www.sublimetext.com/2


Não testei todas, mas gostei da sublime text 2. Mas o Brackets da Adobe é muito estiloso. As versões Open Source são uma alternativa às ferramentas pagas como o Dreamweaver.
Bom, estarei usando a versão Open Source da Adobe, o editor Brockets.

O ambiente de trabalho termina aqui. Em resumo o que fizemos foi:

1. Baixamos as ferramentas necessárias:
1.1. Um controlador de versionamento de código. Neste caso o subversion
1.2. Um servidor local para PHP. Neste caso o wampserver
1.3. Um framework para desenvolvimento PHP. Neste caso o laravel
1.4. Uma interface de desenvolvimento. Neste caso estou usando a Brackets, um editor open source da Adobe

2. Instalamos as ferramentas:
2.1. Instalamos e criamos o repositório para o subversion
2.2. Instalamos o servidor wampserver 
2.2. Importamos o laravel para o repositório
2.3. Exportamos os arquivos do repositorio para locais de trabalho
2.4. Instalamos a IDE para desenvolvimento





Bom, nesse ponto que estamos tudo ja deve estar funcionando:

1. Inicie o server wamp
2. O laravel já deve estar instalado na wamp\www\projeto
3. Abra seu navegador e digite: o endereço: http://localhost/pasta_do_seu_projeto/public/



Se preferir, você poderá realizar algumas configurações no seu servidor local como senhas para o banco de dados e os alias (endereços). Eu não vejo necessidade para essa aplicações exemplo que iremos proceder. Porém, o alias poderemos estar configurando para facilitar. 

A maioria deve fazer as configurações direto no arquivo httpd.confg e ainda alterar o host da maquina, apenas para digitar "localhost" no browser e direcionar ao seu projeto. Certo. E se você tiver mais de um projeto? Vai ficar alterando isso durante quantas vezes?
Não vejo necessidade disso.

Crie apenas um link para cada projeto que achar necessário:

1. Clique no ícone do wampserver
2. Busque a opção Apache/Alias directory e clique em ADD AN ALIAS
2.1. projeto_elearning: escolha o nome que quiser aqui.
2.2. local: informe o diretório que esta a index, no laravel será sempre a public: c:/wamp/www/pasta_seu_projeto/public







&nbsp;O seu ALIAS estará logo na entrada no servidor wamp:



Pronto. Basta clicar nos links que aparecerão ao lado da entrada do servidor. Para todo projeto que estiver desenvolvendo.

Tudo ocorreu bem? Compare com a tela abaixo. Repare na URL e compare com a (http://localhost/pasta_do_seu_projeto/public/). Podemos modificar a escrita das URLs tb no htaccess ou no router do laravel, o que é apropriado. Muito legal tb. Cara, vc vai gostar do laravel tanto quanto eu gostei. Amei esse framework, foi o melhor que já trabalhei. 






&nbsp;

ABORDAGEM
Vamos fazer algumas coisas com o laravel 5.2. Já usei versões anteriores como a 4.2 para alguns projetos e se compararmos uma versão com a outra as pastas do model, view e controller mudaram de local e alguns recursos também, o qual destaca a nova versão que esta no multiauth. 
No inicio fiquei meio perdido até fazer algumas coisinhas básicas para me situar com a ferramenta.

Bom, este post será atualizado várias vezes com conteúdo suficiente para você começar a desenvolver com o Laravel, caso seja uma novidade para você. Para mim acaba sendo útil como um help ou uma consulta por determinada busca.



1. CRIANDO UM CONTROLLER

O Controller ou controlador é parte da estrutura do design pattern MVC. Resumidamente,&nbsp; os controladores se comunicam com os modelos e/ou com as views e neles, comumente, escrevemos as classes para o controle do sistema.

Para melhor entendimento:

i. Documentação do laravel: https://laravel.com/docs/5.2
ii. Estrutura de pastas: https://www.youtube.com/watch?v=WrYXwsJ61Ok&amp;index=3&amp;list=PL_UnIDIwT95PiPV641VBnEwFAvswNZKuX
iii. Controllers: https://www.youtube.com/watch?v=OjlzCnSbSn4&amp;list=PL_UnIDIwT95PiPV641VBnEwFAvswNZKuX&amp;index=10
iv. Artisan: https://laravel.com/docs/5.2/artisan
v. Routing: https://laravel.com/docs/5.1/routing em #Named Routes
vi. htaccess: https://httpd.apache.org/docs/current/howto/htaccess.html
https://wiki.apache.org/httpd/RewriteCond
http://httpd.apache.org/docs/current/mod/mod_rewrite.html


Antes de prosseguirmos, habilite em sua aplicação a visualização dos detalhes dos ERROS do sistema: app/config/app.php. Visualize a linha 29 'debug' =&gt; env('APP_DEBUG', false). Você irá trocar o valor boleano false para true. Ficará assim 'debug' =&gt; env('APP_DEBUG', true). Salve o arquivo.
Por meio desta configuração, poderemos visualizar detalhes dos erros que poderão ocorrer facilitando sua correção. Lembre-se de desabilitar quando sua aplicação chegar ao fim.

Eu deixei de usar o Open Source da Adobe, o Breackets, porque fui tentar abrir um arquivo txt e ele reportou um erro dizendo que só abre arquivos com UTF8. Estou suando agora o SUBLIME TEXT 2. Muito bom! Além da versão portable possui&nbsp; a função highlights (destaques coloridos no texto).

Abra o CMD e entre na pasta de seu projeto: c:\wamp\www\seu_projeto.
Digite agora php artisan e tecle enter. Veja o que podemos estar fazendo com esse utilitário.
O Artisan, é o nome da interface em linha de comando, sendo ele um utilitário do laravel. Por meio dele
podemos criar&nbsp; models, controllers, routers, viwers, etc.

Vamos criar um controller chamado ControllerHello. Digite no cmd: php artisan make:controller ControllerHello. Você estará acessando os arquivos dos controladores em app/http/Controllers. 

Obs: Você pode escolher qualquer nome para o seu controle. Gosto de padronizar as coisas, por isso o prefixo que usei foi controller. 




A partir daqui é linguagem orientada a objeto. Temos uma classe chamada ControllerHello, que criamos com a linha de comando, que representa um controlador. Nesta classe iremos trabalhar com os atributos e métodos. Um detalhe interessante é que não precisamos criar um construtor da classe de forma a instância-la no arquivo que for utiliza-la, como de costume em POO. O método para destruir as instâncias não se faz necessário, afinal não há construtor (risos). Não procurei saber sobre os "garbage collectors" de aplicações para web com o laravel, mas acredito que seja eficiente. Da uma pesquisada se te interessar.

Na IDE Netbeans temos um facilidade, ao escrevermos os atributos, clicando com o botão direito do mouse escolhendo a opção GETTERS e SETTERS, preenchendo automaticamente os métodos dos atributos. No SUBLIME TEXT 2 temos que escreve-los.

Vamos iniciar com um método que retorne uma informação em texto. Eu criei um método publico chamado INDEX. Nele estou retornando uma string. Salve o arquivo.




Vamos agora chamar o controlador.
Como você pode ter visto no link que forneci, sobre a estrutura de arquivos do laravel, o diretório app é onde passaremos a trabalhar com o MVC.
No mesmo diretório app/http, temos o routers. Como o próprio nome diz, é um roteador, neste caso, dos endereços (URLs). Semelhante ao htaccess. Nele podemos nomear nossas rotas e a forma que são chamadas na URL. Se ainda não viu sobre os roteadores, veja nos links no inicio, é importante porque detalha as possibilidades que podemos utilizar com o recurso.

Nó acabamos de criar o controlador, agora vamos chamá-lo (roteá-lo). Estou usando um roteamento nomeado, ou seja, por meio da chamada na URL por "hello", irá chamar meu método "index" do controlador "ControllerHello".




Agora veja na web. Digite "hello" após a barra: localhost/seu_projeto/hello
Aqui vai dar um erro. Sua chance de mudar a configuração que fizemos de visualização de detalhes de erros, para você ver o que acontece, caso seja curioso.




Alguém sabe porque o erro ocorreu? Se não, preste atenção porque o erro é sua pista para resolver qualquer problema. Ele diz o seguinte: NOTFOUNDHTTPEXCEPTION.
Alguma coisa não foi encontrada referente ao diretório http. Abaixo temos maiores detalhes relacionando o roteador.
Essas são suas pistas. Onde você irá começar a investigar a causa do erro. Verificando os arquivos que você modificou, perceberá que esta tudo ok. Abrindo a pasta public, onde se encontra a index, notamos que o arquivo não é chamado na url. Acontece que ao chamar determinada pasta, o primeiro arquivo a ser carregado tem o nome de index.
Experimente inserir index.php e após insira o "hello", o que seria nossa segunda página: localhot/seu_projeto/index.php/hello. Veja:




Bom, temos de melhorar esta URL, de forma que o index.php não seja inserido manualmente. Além disso vamos escondê-lo.
Essa configuração deve ser feita no htaccess (hypertext access). Este arquivo esta presente nos servidores web e sua função é rotear os diretórios da aplicação. Veja a documentação nos links que forneci no inicio deste conceito.

Clique no ícone do wampserver e vá até a alias que você criou e escolha a opção edit htaccess:




Vamos editar este arquivo. Para facilitar sua visualização, copie o documento inteiro que deve estar tudo escrito na horizontal. Selecione tudo Ctrl+A, e copie Ctrl+C e cole em um novo arquivo no SUBLIME TEXT 1 Ctrl+V.
O seu arquivo original apresentará essa configuração por default:

&nbsp;&nbsp;&nbsp; RewriteEngine On

&nbsp;&nbsp;&nbsp; # Redirect Trailing Slashes If Not A Folder...
&nbsp;&nbsp;&nbsp; RewriteCond %{REQUEST_FILENAME} !-d
&nbsp;&nbsp;&nbsp; RewriteRule ^(.*)/$ /$1 [L,R=301]

&nbsp;&nbsp;&nbsp; # Handle Front Controller...
&nbsp;&nbsp;&nbsp; RewriteCond %{REQUEST_FILENAME} !-d
&nbsp;&nbsp;&nbsp; RewriteCond %{REQUEST_FILENAME} !-f
&nbsp;&nbsp;&nbsp; RewriteRule ^ index.php [L]

&nbsp;&nbsp;&nbsp; # Handle Authorization Header
&nbsp;&nbsp;&nbsp; RewriteCond %{HTTP:Authorization} .
&nbsp;&nbsp;&nbsp; RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]




Você substituirá por:

&nbsp;&nbsp;&nbsp; RewriteEngine On

&nbsp;&nbsp;&nbsp; RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
&nbsp;&nbsp;&nbsp; RewriteRule ^(.*) - [E=BASE:%1]

&nbsp;&nbsp;&nbsp; RewriteCond %{ENV:REDIRECT_STATUS} ^$
&nbsp;&nbsp;&nbsp; RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

&nbsp;&nbsp;&nbsp; RewriteCond %{REQUEST_FILENAME} -f
&nbsp;&nbsp;&nbsp; RewriteRule .? - [L]

&nbsp;&nbsp;&nbsp; RewriteRule .? %{ENV:BASE}/index.php [L]




Agora acesse normalmente:





O que fizemos foi o seguinte (veja a documentação do htaccess para maiores detalhes):

1. RewriteCond: Informamos as diretivas de quando a modificação deve ocorrer. O modo rewrite no arquivo de configuração do apache deve estar habilitado (clique no ícone wampserver apache/httpd.config e procure a linha LoadModule rewrite_module modules/mod_rewrite.so, habilite-a caso estiver desabilitada).
Foi informado as condições em que a URL poderá se apresentar de forma lexical.

2. RewriteRule: O comando anterior é seguido de uma regra, ou seja, quando for encontrado determinada condição é executada uma regra. A qual é chamado a index.php preenchendo a URL base.

Obs: Em outro post podemos abordar maiores detalhes ou como se escreve um htaccess.


O que você viu até aqui:

1. Como se cria um controlador por meio do utilitário do laravel, o Artisan
2. Visualizou formas de chamarmos com o router as URLs da aplicação
3. Configurou alguns arquivos para melhor visualização e acesso à arquivos e diretórios da aplicação


Faça um comit das suas modificações.
1. Vá até a sua aplicação;
2. Clique com o botão direito do mouse e escolha a opção SVN COMIT

Uma tela aparecerá. Nela estará os arquivos que foram modificados (são muitos mais de 5 mil arquivos por que vc instalou o laravel e adicionou dependencias, é só aguardar). Na tela você também tem a opção de visualizar os logs que ja foram realizados e pode fazer comentários sobre o que foi modificado que estarão junto ao comit e serão apresentados nos logs.
Note que os sinais em asteriscos são os arquivos que foram modificados. No seu provavelmente deve ser apenas o diretório APP e CONFIG. No meu caso, eu mexi no PUBLIC. Ao clicar OK na janela descrito na imagem abaixo, estarei guardando as modificações.






---xxx---


2. CRIANDO VIEW

As VIEWs fazem parte do design pattern MVC. Resumidamente, as VIEWs tratam-se da parte visual da aplicação é onde deixamos as paginas da web.

Links relacionados:

1. BLADE: https://laravel.com/docs/5.1/blade


Clique com o botão direito do mouse e escolha new file. Escreva uma página simples em HTML e salve como pagina.php.




A pagina inicial default welcome.blade.php, poderá ser excluída. Não iremos mais usa-la.
Vá ao router e insira a nova página a ser chamada.




Chame a página na web, neste caso será a raiz.





Até aqui esta OK.
O laravel tem um recurso chamado BLADE TEMPLATES. Trata-se de uma poderosa engine para desenvolvimento de templates em laravel. Vamos criar um template utilizando blade que você entenderá.

Leia o link referencia sobre Blade que coloquei no início deste conteúdo para entender a sintaxe.

Crie um novo folder chamado template, na view. Clique em cima do folder template e crie um novo arquivo. Escreva a sintaxe conforme você vê na imagem abaixo. Salve o arquivo como template1.blade.php. Se vc não salvar o arquivo como blade, a engine não estará ativa.




Você acabou de criar um template. Agora irá chamá-lo em uma pagina.

Crie um arquivo na view, fora do folder template, adicione a sintaxe como na imagem e salve o arquivo como pagina2.blade.php.









Agora chame a página2 no router. Depois chame a pagina raiz no browser, e veja:
Route::get('/', function () {&nbsp;&nbsp;&nbsp; return view('pagina2');});




Com este template, para todas as páginas que criarmos sendo pagina3, pagina4, pagina5, etc. Que utilizarem o mesmo template, basta chamá-lo em todas as páginas com o extends. Dessa forma você não precisa ficar repetindo o código html para toda a página que você criar que utilize o mesmo template. Entendeu?
Basta inserir o HTML5 nos modelos divididos em seções como content e footer. Ou da maneira como você quiser.

Veja que é no template que você defini a estrutura de marcação de texto e o php. Leia a documentação e insira isso dentro de um section: {{ 'aqui é um echo em php' }}. O arquivos CSS e o JS podem ser declarados na pasta public, e chamado na template. Veremos isso mais a frente quando fizermos algum miniprojeto com tudo que aprendemos.

A divisão das diretórios e arquivos da VIEW é por sua conta, defina antes de cada projeto, desta forma vc padroniza para toda a equipe (analista de sistemas). 



Faça um comit no SVN. Como descrição insira: "Criado arquivos em blade".


---xxx---


3. CRIANDO MODELs

O model pode ser entendido como o intermediador entre o View e os Controllers. Por meio dele podemos armazenar dados e sinalizar aos outros VCs (views e controllers).Vamos aplicar o conceito sobre uma base de dados.


links relacionados:
1. MIGRATIONS: https://laravel.com/docs/5.1/migrations 
2. SEED: https://laravel.com/docs/5.1/seeding
3. ELOQUENT: https://laravel.com/docs/5.2/eloquent
4. MODEL: https://www.youtube.com/watch?v=U3PsPHqYRfQ&amp;list=PL_UnIDIwT95PiPV641VBnEwFAvswNZKuX&amp;index=6

O responsável por escrever um diagrama de relacionamento de dados (DER) pode ser considerado o DBA (data base administrador). Mas hoje seremos nós. Por falar nisso, se você quiser se aventurar, procure saber mais sobre o DB DESIGNER. Esta entre os melhores aplicativos para desenvolvimento de diagramas de relacionamento para banco de dados. Além disso, permite você exportar o modelo para ser criado no mysql. Muito bom!

Podemos criar a relação do banco de forma manual ou por meio do laravel.


1. MANUAL

Com o Wampserver ligado, entre no localhost e clique em phpmyadmin.




Clique em banco de dados e crie um banco de dados com o nome de teste_model com mapa de caracteres utf8 (caso contrário, para certos caracteres do teclado apareceram símbolos que vc nunca viu na vida):







Certo, o banco de dados teste_model esta pronto. Clique em cima do teste_model e crie uma tabela chamada cliente com 6 colunas (id, nome, idade, created_at, updated_at,deleted_at). Clique em executar:






Innodb é um padrão do mysql que acompanha o serviço da chave estrangeira. Não precisa de detalhes sobre isso para fazer o que precisamos.
Só não se esqueça de inserir como chave primaria o ID e auto incremento, o mapa de caracteres e a quantidade de caracteres para a variável varchar(50).
Clique em guardar.

Obs: Você pode configurar o mysql no phpmyadmin inserindo senhas de acesso. Neste caso não há necessidade disso.


Nosso banco por meio manual esta pronto.


2. CRIANDO TABELAS PELO LARAVEL

Você precisa criar um banco de dados para ser inserido as tabelas pelo laravel. Poderá usar teste_model2.







Para criar as tabelas:

1. Informe as credencias do banco de dados na pasta app/config/database




Atenção: estamos usando dados default do sistema sendo a porta e o nome do usuário do banco de dados. Por medidas de segurança, em uma aplicação normal jamais use default. A primeira tentativa de conexão com o alvo, para um atacante, será sempre o default. Pode pegar algumas worldlist na internet e perceberá que sempre, inicialmente, a tentativa são os padrões. E pode acreditar, há pessoas que deixam as configurações default do sistema.
Nosso exemplo não tem necessidade de configurar isso. Mas saiba que se faz necessário.

Se quiser gravar no que criamos manualmente, basta trocar o nome do banco.


Vamos criar os controles para o banco de dados em laravel, são chamados de migrations.
Abra o CMD e digite a linha de comando: php artisan make:migration table_cliente --create=cliente

Visualize a documentação do migration para entender melhor a sintaxe. Nós criamos uma classe migration chamada table_cliente com o nome da classe chamada cliente.
Visualize o arquivo criado em app/database/migrations. Você adicionará as colunas da tabela chamada cliente.





Note que adicionamos a mesma estrutura que fizemos na forma manual sendo o id uma variável inteira, o nome uma variável por caractere, a idade como inteiro e o timestamp.
Por meio do migration podemos criar a estrutura de das tabelas. As relações de relacionamento dinâmico você poderá estar se aprofundando lendo mais sobre a documentação do laravel. 
&nbsp; 

Vamos agora criar os SEEDERs, o que conterá os dados da tabela. Caso deseje que a tabela tenha dados iniciais. Isso é interessante quando seu projeto necessitar de credenciais default.

Abra o CMD e digite a linha de comando php artisan make:seeder sCliente
Dê um enter. Visualize a classe no diretório app/database/seed




Preste atenção: nós apagamos os dados da tabela para inserirmos tudo que esta no array em php. Note que depois da vírgula poderá acrescentar mais dados. Se incluir mais um array, vc estará adicionando mais um elemento à tabela (nome,idade) ou seja mais um cliente. Entenda que o que for dado padrão não precisa ser inserido, principalmente o ID que é auto incremento.Os timestamps que não foram escritos serão 0.

Logo após o array de dados default, inserimos na tabela os valores escritos.

Agora clique no arquivo DatabaseSeeder.php. Nele informaremos apenas as classes que iremos rodar com o comando que veremos a seguir. Inclua a classe que acabamos de criar, como no exemplo default:







Agora vamos rodar (Running) as classes migration e seeder. Digite a linha de comando no CMD:
1. php artisan migrate - irá criar a tabela ou tabelas que estarão no diretório app/database/migrations.

Você poderá voltar o comando feito com php artisan migrate:rollback. Veja mais detalhes na documentação.








Obs: Note que foram criadas tabelas a mais que estavam no diretório. Não tem problema. Pode excluir se quiser. Iremos usar apenas a sCliente.
Vamos rodar agora o seeder para inserirmos os dados default.

2. php artisan db:seed - esse comando irá inserir na tabela do banco de dados as informações das classes que estão no arquivo DatabaseSeeders.php. 




Note que a flag timestamp do migrate, por default, incluiu o created_at e o updated_at. Se quiser inserir outras flags como o deleted_at basta ver a documentação seria: timestamp('deleted_at').


Voltemos agora ao model.
Abra o CMD e crie uma classe model com o comando: php artisan make:model cliente
O arquivo criado esta no diretório app/. Na versão 4 do lavarel, tínhamos um diretório chamado model.




Temos então uma classe que herda a model.
Adicione as flags existentes da tabela cliente:



Vá até o nosso ControllerHello e chame o modelo. Lembre-se de chamar o diretório que esta o model, neste caso o app/. Veja: uses App







Atenção: veja a documentação para saber como usar querys dinâmicas. Vc poderia chamar apenas a primeira posição da base de dados com ::find(1), eu alterei como descrito no vídeo de apresentação para você visualizar as possibilidades. É retornado um array.

Vá na url e entre com a chamada do controle hello: localhost\seu_projeto\hello









Explore as possibilidades.

Lembre-se de fazer o comit.

obs: O tópico é pequeno, mas é rico em informação, vc talvez levará 1 dia para ver tudo e fazendo os testes. 


---xxx---

3. AUTENTIFICAÇÃO

Links relacionados:1. AUTHENTICATION: https://www.youtube.com/watch?v=k89EOb9fqa0&amp;index=11&amp;list=PL_UnIDIwT95PiPV641VBnEwFAvswNZKuX
2. Remember_Token: https://laravel.com/docs/5.2/upgrade#upgrade-4.1.26
3. CIPHER: https://laravel.com/docs/5.2/encryption#basic-usage
4. Segurança na autentificação: https://laravel.com/docs/4.2/security#authenticating-users
5. CSRF: https://laravel.com/docs/4.2/html#csrf-protection
6. Validation: https://laravel.com/docs/4.2/validation#custom-validation-rules
7. Blades: https://laravel.com/docs/5.1/blade 


Antes de aplicar o conceito do vídeo do canal devJodo da Laravel, vamos fazer manualmente para você entender melhor o que esta acontecendo. Veja a documentação do Laravel 5.1 sobre o Authentication. O Exemplo é mais cru.

1. Crie um novo banco de dados chamado teste_auth (não necessariamente, pode usar o que vc ja esta usando);
2. Crie uma tabela chamada users e insira as colunas: id (com auto incremento e primary key), name, email, password e remember_token.

Obs: a flag remember_token faz parte do laravel. Ele armazena um token para apontar ou assinalar o usuário para demais dependências do Auth, a classe de controle de usuários autenticados.


No seu projeto, troque ou insira as credenciais do banco de dados sendo: teste_auth, root, e senha em branco. Como já fizemos anteriormente.

Obs: Vou criar outro projeto de modo que possam aparecer erros. Caso encontre algum será mais rápido sua resolução.

Abra o arquivo router app/http/routes.php
Insira o roteamento da raiz para dentro do middleware. 




Vá até seu browser e abra o projeto. Vai acontecer um erro:




O erro é referente ao CIPHER. Ele esta relacionado à criptografia OpenSLL do laravel. Este método permite usarmos, em setters dos atributos de uma classe, valores criptografados com crypt::encripty(), Hash::make(). Em relação a descriptografia, somente o Crypt possui com a assinatura crypt::descrypt, o qual usa a chave do Cipher, que você poderá esta visualizando no config/app.php na linha 94.

O erro diz que não há suporte para criptografia porque a chave é inválida. Não temos chave nenhuma o campo esta em branco, veja no arquivo config/app.php na linha 94 a 'key' =&gt; env('APP_KEY'). Não há chave.

Você precisa criar uma chave. Abra o CMD. Dentro do seu projeto digite a linha de comando: php artisan key:generate &gt; key.txt

Estamos gerando uma chave para usar nas criptografias e mandando esta chave no diretório do projeto estando escrita no arquivo chamado key.txt.

Abra este arquivo e copie a chave. 
Cole esta chave na linha 94 do arquivo config/app.php como descrito na figura abaixo.
Salve e entre no browser chamando sua aplicação. Deverá estar tudo ok.








O próximo passo é modificarmos a model User. Note que o laravel já tem pronto o sistema de autentificação. E reutilizar o código faz parte para acelerarmos o desenvolvimento.

A model User original da sua aplicação é esta:





Iremos modifica-lo para:








1. Remember_token: este é o responsável pela assinatura do usuário na aplicação laravel. Iremos retirá-lo do campo hidden voltados ao array trocando-o pelo id.
2. Inserimos um atributo com o nome da tabela, que neste caso chama-se 'users';
3. Inserimos os campos da tabela user que iremos operar com a model User: nome,email e password. Se quiser inserir o id para usá-lo em algum momento basta inseri-lo;
4. Incluímos que o timestamps não esta habilitado, por default ele esta como true.


Em desenvolvimento web existe um conceito chamado FRONTEND e BACNKEND. É só voe digitar no google para ter uma ideia. De forma generalizada, podemos entender que:
As páginas de FRONTEND podem corresponder ás paginas de apresentação de conteúdo ao usuário como coletar dados de entrada no sistema;
As páginas de BACKEND podem corresponder às páginas de controle do conteúdo apresentado ao usuário na FRONTEND ou gestão de informações por usuário. Podemos entender como uma parte administrativa do site onde só é dada ao usuário após sua credencial ser aceita no sistema.

Neste conceito, nosso exemplo terá a&nbsp; página resources/view/welcome.blade.php será nossa Frontend que ira capturar as credencias do usuário no sistema. Se o usuário existir, será direcionado para a Backend.

Altere a resources/view/welcome.blade.php acrescentando um formulário de login:






Preste atenção: Se fôssemos programar numa página comum, ao termos a chamada php precisaríamos abrir as tags de chamada, como por exemplo na condicional. No laravel basta inserirmos o @ para chamarmos algum comando como a condicional, laços de repetição, etc. Note também que um echo em laravel corresponde ás chaves duplas.
Isso tudo faz parte da engine BLADE do laravel.

Bom, estamos trabalhando com Session, para informarmos ao usuário sobre possível notificações. Uma Session é apagada da memória após um reflesh da página, ou seja, é um armazenamento temporário. Neste caso a variável da Sessão é a msg, que iremos trabalhar nos controles.

Chamamos em chave dupla a csrf_field. No laravel4 tinhamos a chamada parecida em chaves duplas com Form:Token(). O Laravel cria um assinatura para o formulário DE FORMA A PROTEGÊ-LO contra&nbsp; ataques cross-site request forgery ou XSS. 
Para ver o token abra o INSPECIONAR_ELEMENTO do seu browser e veja o token invisível.


Sua página, ao acessar o browser, ficará assim:





Agora crie uma VIEW chamada create.blade.php. E insira o formulário de cadastro:




Note que estamos usando o HTML5 nos campos. Existe outra maneira de declarar os formulário em laravel com chaves duplas. Eu prefiro não tirar a característica do html, uma vez que se partir o layout de terceiros eles não vão inserir isso, e ficar modificando é perda de tempo.


3.1. GRAVANDO CREDENCIAIS

Ja podemos criar uma rota. 
Abra o CMD e crie um controle chamado ControllerUser: php artisan make:controller ControllerUser
Abra o controle app/http/Controllers/ControllerUser. E escreva a função de chamada da VIEW.



Abra o app/http/routes.php e adicione a linha de chamada para a view



Vá até a página resources/view/welome.php e chame no link a página create:




Teste o link. Ao entrar na raiz e clicar em CADASTRE-SE, deverá lhe direcionar para a página abaixo:




Para melhorar a visualização eu alterei para GETTERS e SETTERS, as chamadas nos controles. Visto que o método GET chama as páginas e o método SET é um POST das páginas.


Veja:



Altere apenas no seu route a chamada para:







Agora iremos adicionar a rotina do método postCreate. Estou usando um exemplo da comunidade LaraCast. Para exemplificação, se nunca usou o laravel, é ótimo. Eu faço essa rotina de uma outra forma e inclui envios de emails de confirmação, a estrutura do banco tb é diferente. Outra hora podemos abordar.


1. Validator, veja a documentação de validação do laravel. É interessante e uma mão na roda. Por exemplo, além de criar rotinas que validem um email, como vc pode ver na internet usando php com expressão regular você resolve isso simplesmente atribuindo à validação a chamada 'email' (em html5 ja temos isso). Outro exemplo é o pasword. Queremos no minimo 3 caracteres, basta inserirmos min:3. Outro exemplo é quando queremos um campo unico na tabela, com o email, ou seja nenhum email pode se repetir, basta atribuir à validação unique:NOME_DA_TABELA, na frente do campo que queira que seja unico.
Isso é uma maravilha.

2. Validator-&gt;fals(), com pode ler na documentação, é quando algum erro é cometido que não respeitem as validações feitas cima de campos. É retornado um erro. A comunidade inserir um foreach, não é preciso, vc resolve apenas com uma linha desta forma :
if($validation-&gt;fails()):&nbsp;&nbsp;
return Redirect::route('account-create')-&gt;withErrors($validation)-&gt;withInput(); endif;
Veremos esse conceito depois.

Crie uma rota com a chamada do método Post para ser chamado no formulário:





Chame no formulário da página CREATE, o postCreate em action:



Vá ate´sua página e teste. Um erro irá o ocorrer.




A versão Laravel5 precisamos declarar nas classes os métodos que iremos utilizar. Algo que ja esta incluso nas versões anteriores. Adicione na ControllerUser as bibliotecas declaradas em 'uses':






Repita a operação. Voilá.











3.2. LENDO CREDENCIAIS

Crie uma página chamada recources/view/backend.blade.php



Adicione o método postLogin no ControllerUser semelhante ao método anterior:






Adicione mais dois métodos. O backend para quando as credenciais existirem e o Logout para sair da Sessão Auth.
Note que a validação é a mesma das anteriores. Anteramso após ela. Veja na documentação sobre a Autentificação (Auth). Ela requer como entradaemail e senha, definidos no modelo User.

No laravel4 usáva-mos o Input:all() nas chamadas na versão 5, usamos o request. Desta forma o campo input email é chamado $request-&gt;email, e assim por diante.
Bom, as credenciais dos campos é comparado ao usuario cadastrado no Banco de dados simplesmente com a linha Auth:attempt($user).

Crie o roteamento para o método postLogin



Adicione mais duas rotas com a middleware:




Note que dentro do middleware nos adicionamos o campo auth. Ou seja, apenas se o usuário esiver logado ele poderá acessar as rotas backend e logout.

No laravel4 nós faziamos isso no filter, que acompanhava o router. Hoje não temos a filter e em seu lugar é a Middleware. Supomos uma página administrativa e outras páginas de usuarios comuns. O usuario comum não pode ter visualização da página administrativa. Para controlarmos isso no laravel4 era nos filter, hoje são nas middleware. Depois vemos uma aplicação disso.

Altere a Auth em middleware de return redirect()-&gt;guest('login'); para a raiz return redirect()-&gt;guest('/');




Agora basta chamar no action do formulario de login na pagina welcome







Agora teste entrando com as credenciais que vc criou. Teste apagando-as do banco e cadastrando novamente, etc.
Ao entrar com as credenciais fui redirecionado para Backend:


Ao sair volto para a FrontEnd:








---xxx---

4. MAIL

Links relacionados:
1. MAIL: https://laravel.com/docs/5.1/mail
2. SMTP: https://pt.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
3. YAHOO: https://help.yahoo.com/kb/smtp-error-code-table-sln23996.html


Neste capítulo vamos enviar email por meio do laravel. É muito fácil.&nbsp;



Obs: Criei um novo projeto para evidenciar os possíveis erros e suas resoluções.




















Abra o arquivo config/mail.php 
Neste arquivo iremos configurar o SMTP (protocolo de envio de msg) do laravel. Estou usando o servidor do yahoo.com.br como exemplo. Ele é o mais simples de ser configurado por não exigir configurações extras dentro do seu mailBox para criar uma senhaApp ou dar autorização para ser usado em outro aplicativos como acontece com a gmail.




Atenção:
Host: smtp.mail.yahoo.com.br
Porta: 587
Encrypt: tls (vc pode usar a ssl)
From: insira o email base da aplicação. Ou seja, para todos os email a serem enviados tera a assinatura deste campo.
Para Username e Password vc tem duas opções:
1. Inserir diretamente no campo:
'username' =&gt; env('MAIL_USERNAME','username@server.com'),
'password' =&gt; env('MAIL_PASSWORD','senha'),

2. Inserir no arquivo de configuração rápida, o .env.
Renomei-o retirando o "exemple" deixando-o como apenas .env:




Todos os campos nele poderão ser chamados onde for necessário na sua aplicação. Vamos alterar, como exemplo, apenas o username e o password.




Veja que neste caso alteramos apenas o username e password. Se quiser poderá aplicar a mesma ideia para os demais campos. Basta chamar nos campos o nome relacionado, como:
'host' =&gt; env('MAIL_HOST', 'smtp.mail.yahoo.com.br'),
Troque para
'host' =&gt; env('MAIL_HOST'),

E assim por diante. Para torna-lo dinâmico crie uma chamada, no campo que for usar chame-a pela assinatura env('NOME_DA_CHAMADA');


Você ira criar agora uma página para o corpo do email. Isso mesmo! Você terá um folder chamado email e dentro dele terá os arquivos que são o corpo do email. Você poderá incluir códigos em html, css, inserir imagem, etc de forma a personalizar este corpo.
Crie uma pasta chamada "mail" no diretório resources/views. Dentro dela crie o arquivo chamado "mail.blade.php".
E insira o conteúdo.





Crie uma página como o nome resources/view/send-email.blade.php. Crie um controller (ControllerEmail) ou use o que preferir. E crie uma rota para o método.

Página principal:







Controle: Neste caso estou enviando o email para mim mesmo. No Mail:send() é onde vc defini para qual endereço quer enviar (destinatário):








Chame a página.




Primeiro Erro:




Chame a biblioteca Mail na uses:







Segundo Erro:




Precisamos criar uma chave para a aplicação.
Abra seu CMD e digite a linha de comando, dentro de seu projeto: php artisan key:generate &gt; keyApp.txt

Abra-o no SUBLIME TEXT 2, estará entre os arquivos do projeto. Salvo se você não entrou dentro do projeto para usar o comando.




Copie&nbsp; a chave e insira no arquivo .env:



Terceiro Erro:



O argumento esta relacionado ao drive do Mail::send(). Foi um erro de sintaxe, veja que no anterior declarei uma string em um local que é um vetor, veja na documentação sobre mail laravel:
Para acertar o erro adicione o vetor:








Quarto Erro:





Quando criei outra aplicação para mostrar os erros acontecendo e uma possivel resolução, me esqueci de trocar a chamada da VIEW. É só acertar o endereço:






Quinto erro:




Este erro esta dizendo que foram realizadas 3 possiveis autentificações com o email informado. Mas como o laravel sabe disso? Pela chave appKey que você criou.
No meu caso devo ter copiado de um arquivo de testes que estava realizando antes de criar este como novo para vermos os erros acontecerem. Se este é o erro que esta vendo ou similar, basta criar outra chave.
Abra o CMD e digite a linha de comando: php artisan key:generate &gt; keyApp.txt.
Abra o arquivo keyApp.txt. Copie a chave e cole no arquivo .env







Aproveite e personalize seu método sendEmail. O retorno do método nativo Mail::send() é 1 para true e 0 para false. Sendo assim podemos criar uma msg de retorno para entendermos o que esta acontecendo:






Agora chame sua aplicação.



Para mim levou alguns segundo para ser enviado. Vc pode personalizar com uma imagem de loading.
O retrno foi este:





Para chegar em minha caixa de email levou alguns minutos, entre 4 e 5. Isso pode estar relacionado ao servidor de email e não à sua aplicação.






O corpo que editamos esta na imagem abaixo. Vc pode personalizar isso como quiser, incluindo css e html, inserir imagens, etc.






Agora faça o seguinte. Envie um dado para dentro desta página por meio do controle. Entre no ControllerEmail ou onde esta o método de chamada do sendEmail. Adicione o campo $data com uma entrada em string. É desta forma que enviamos dados por email, vc pode enviar o qeu quiser para o corpo



Entre na sua chamada da página de corpo do email resources/mail/mail.blade.php
Adicione as chaves duplas e dentro dela:



A variável passa a ser "meu_nome". E ela é chamada no corpo. Basta alimenta-la com dados no controller.


Fácil. Leia a documentação.



Para aguçar sua criatividade, tente usando POST:
Altere a página de corpo do email para:



Altere a página de entrada inserindo um formulario:




Altere seu roteamento de Get para POST:




Altere o controller:




Faça o teste enviando a mensagem:




O corpo será este:





Tem outra forma de enviar. Poderemos abordar sobre isso depois.
Teste com outros servidores.
A partir daqui vc já possui um norte.




---xxx---





7. PACKAGES (instalando e criando pacotes)

São pacotes que podem ser instalados e/ou criados para o framework laravel. Neste tópico vamos instalar um package existente de um repositório e depois vamos criar um packager e disponibiliza-lo para instalação em repositório publico.


Links:
1. PACKAGES: http://packalyst.com/
2. INTERVENTION PACKAGER IMAGE: http://packalyst.com/packages/package/pecee/intervention-image
3. OFICIAL INTERVENTION-IMAGE-INSTALL: http://image.intervention.io/getting_started/installation
4. GITHUB DESKTOP: https://www.youtube.com/watch?v=om42hY4A5Qg

Obs: Estou em uma nova instalação para visualizarmos os erros possíveis.
7.1. INSTALANDO UM PACKAGE

Vamos instalar o packager INTERVENTION-IMAGE.
Conforme o sítio oficial http://image.intervention.io/getting_started/installation

 

Para visualizar e confirmar a instalação do pacote, abra o composer.json do laravel e busque o requare. Estará assinalado entre o array.




Vamos agora configurar o Intervention-Image para que sua classe seja reconhecida em todo o sistema. Na mesma página, rolando para baixo, você verá com é feita esta configuração.
No laravel, abra o arquivo em config/app.php.
Em Providers, você irá adicionar a linha Intervention\Image\ImageServiceProvider::class:




Agora adicionaremos no mesmo arquivo, em Alias, a linha 'Image' =&gt; Intervention\Image\Facades\Image::class:




Se preferir as configurações default, basta abra o cmd e rode o comando, para laravel versão 5.x: php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5" 

Vamos fazer um teste.
Na mesma página de instalação do Intervntion-Image, ao rolar a tela, você verá um exemplo prático que poderá ser usado como teste.
Vamos aplicar esta função no roteamento da função principal welcome.
1. Procure alguma imagem online no google image [http://images4.fanpop.com/image/photos/18800000/Cristina-Scabbia-cristina-scabbia-18802420-479-720.jpg];
2. Insira o link da imagem no make;
3. Chame a página no browser.



O resultado:





Você poderá ver todos os recursos do pacote Intervention-Image, para manipulação de imagens no Laravel, no site oficial http://image.intervention.io/getting_started/installation.

Existem diversos pacotes que poderão ser encontrados na internet como no https://packagist.org/&nbsp; e no http://packalyst.com/.&nbsp; &nbsp; 

A vantagem dos pacotes esta no aceleramento do desenvolvimento. Por exemplo, sistemas de pagamentos que utilizam APIs são os mais procurados, entre 5 a 7 minutos, esta configurado em seu site um sistema básico de ecommerce. Além de funcionalidades que veem a melhorar as funcionalidades e recursos do Laravel.



7.2. CRIANDO PACOTES

Agora vamos criar um pacote.
O pacote que iremos criar, como exemplo, fará uma ação básica: mostrar o fuso horário escolhido.

Obs: estarei criando um novo projeto para visualizarmos os possíveis erros e sua resolução

links:
1. Comandos do composer INIT - https://getcomposer.org/doc/03-cli.md#init
2. PSR-4: https://laravel.com/docs/5.2/structure#the-app-directory
3. Providers: https://laravel.com/docs/5.1/providers


Vamos criar os diretórios deste pacote. Vc poderá escolher o nome que quiser, abaixo são nomes sugestivos:
1. Packager: diretório onde ficarão meus pakagers;
2. Draco: subdiretório onde estarão os projetos. Refere-se ao vendor (você entenderá isso a frente);
3. Timezones: diretório que dá nome ao projeto ou à aplicação. Referece ao nome do pacote name (você entenderá isso a frente);
4. src: diretório onde estarão os arquivos do pacote.

Crie os diretórios no diretório raíz do laravel. Clique com o botão direito do mouse sobre o nome do seu projeto e escolha NEW FOLDER (novo diretório). A estrutura dos diretórios ficará como na imagem abaixo:




Agora você irá criar um composer.json para este diretório. Para isso, abra o CMD e entre na pasta do packager/draco/timezones. Ou seja, ele estará dentro do diretório da aplicação.Digite a linha de comando: composer init

A documentação para as instruções de procedimento para criação do composer.json você poderá ver aqui https://getcomposer.org/doc/03-cli.md#init.
Veja a imagem como modelo. Ao confirmarmos os dados, o composer.json é criado no diretório referente:






Precisamos agora definir um Alias para este pacote na estrutura do laravel. Isto é feito no autoload. O que estou dizendo aqui esta tudo na documentação.

Abra o arquivo composer.json original (main), do laravel e adicione a linha no array psr-4:

Você poderá ver mais informações sobre a criação de Alias neste endereço https://laravel.com/docs/5.2/structure#the-app-directory





Agora abra o CMD e digite a linha de comando: composer dump-autoload
Veja que é criado o diretório vendor e dentro dele o autoload (alias) do packager.
Entenda que, ao usar no projeto o nome do Alias Draco/Timezones esta se referindo ao diretório packager/draco/timezones/src. Este Alias iremos referenciar nos demais arquivos que iremos criar.




Como você deve ter visto na documentação do laravel sobre app-directories (https://laravel.com/docs/5.2/structure#the-app-directory), como parte deste relacionamento precisamos criar o Provider (https://laravel.com/docs/5.1/providers)


Obs: você irá usar o CMD para um comando no artisan. Este comando, como qualquer outro, não será executado dentro do diretório do packager devido ao Alias. Você deverá sair do diretório do Packager e entrar no diretório do seu projeto e executar o comando.

Abra o cmd e digite a linha de comando (fora do diretório do packager): php artisan make:provider TimezonesServiceProvider

Ele será criado no diretório padrão do laravel app/providers/TimezonesServiceProvider.php.




Recorte este arquivo e cole no diretório packager/draco/timezones/src. Você poderá entrar em c:/ wamp/www/nome_do_seu_projeto/app/providers recortar e colar em c:/wamp/www/nome_do_seu_projeto/packager/draco/timezones/src.




Agora adicione a classe do serviço provider ao arquivo de configuração do laravel config/app.php.




Veja que Draco/Timezones é referente ao Alias que criamos que vai direto ao ../src do packager.Onde chamamos a classe do provider.
Esta configuração pode acompanhar o README do packager quando você publica-lo, pois, são dados de configurações.

Agora vamos criar um controller para chamada das funcionalidades da aplicação.
Crie um controller fora do diretório packager. Recorte e cole para dentro do src do packager.


O erro ocorrerá:





A classe TimezonesServiceProvider&nbsp; não foi encontrada devido ao seu namespace não vincular ao Alias. Renomeie o namespace para Draco/Timezones. Abra o CMD e execute novamente um composer dump-autoload. Depois crie o controller. Será criado em app/http/controllers








Recorte o app/http/controllers/TimezonesController.php e cole em packager/draco/timezones/src.
Abra o controller e adicione o método Index.

obs: Não se esqueça de trocar o namespace e incluir as bibliotecas Carban e Controller.



Note que estamos passando um dado por parâmetro.
Copie e cole a app/http/routes.php para dentro do packager/draco/timezones/src.
Abra o route e adicione o roteamento: Route::get('timezones/{timezone?}', &nbsp; 'laraveldaily\timezones\TimezonesController@index');




Abra o arquivo packager/draco/timezones/src/TimezonesServiceProvider.php e acrescente o comando ao método register para chamada do routes.php




Vamos agora criar uma VIEW para visualização do conteúdo de forma personalizada, semelhante a welcome.blade.php da chamada inicial defaut do laravel.

Com o botão direito do mouse sobre o ../src do pakager crie um folder chamado views e dentro dele um arquivo chamado timezone.blade.php.
Copie e cole o conteúdo da welcome.blade.php e acrescente a chamada da variavel $current_time







No TimezonesServiceProvider.php, no método boot, você deverá adicionar o comando para ler a view.




Agora chame no seu browser a aplicação.

Obs: Não modifiquei o .htpaccess. Esta como o original. Ou sjea, precisamos usar o index.php






Bom, esta é uma maneira básica de criamos pacotes para o laravel.
Você poderá aperfeiçoar o seu desenvolvimento com base nestas informações.

No próximo post, poderemos ver como publicaremos os pacotes desenvolvidos para as compilações do composer.phar. De forma que podemos incluir as dependencias com as linhas de comando no CMD como composer require seu_pacote.

Note que, conforme a icença, você poderá criar seu portifólio de pacotes (ou aplicações ou o que você quiser) em repositórios publicos como o github, o packagerlist (do composer), o packalist (de comunidades do laravel), entre outros.



---xxx---