Ayo kids, today vou-vos ensinar a trabalhar com Laravel, uma Framework de PHP open-source, que vos irá ajudar a criar websites da maneira mais fácil e segura possível, utilizando métodos Anti-SQLi da Framework e CSRF (Cross Sire Request Forging).
Why Laravel?
Bem, para quem programa em Raw PHP, posso-vos dizer que o que mais vai fazer-vos mudar para isto (sem falar das packages que isto tem) é o ficheiro Routes, neste ficheiro podem mapear tudo o que se passa no vosso websites, entre diretórios (e o método deles, seja POST/GET/PATCH/PUT/DELETE) e a função que é executada sempre que lá entram.
Sim... mas apenas isso?
Não, Laravel ainda vem equipado com Blade, uma "framework" de HTML que vos permite executar código PHP da maneira mais simples e compacta possível, como verificar se o utilizador está logado, com um simples "@if(Auth::check())" que utiliza a classe "Auth" e dá return num TRUE ou FALSE ao executar a função check(), vendo se tens a sessão iniciada nesse browser.
Podem também utilizar layouts para o design e fazer um "@yield('NomeDoYield')" no layout para o chamarem noutro ficheiro e inserir dados lá (com um @extends('layouts.NomeDoLayout') e um @section('NomeDoYield') "blah blah" @endsection), sem precisar de repetir o mesmo layout por todas as views (páginas visuais, ou output pages)
Coisas necessárias:
- Composer (https://getcomposer.org/Composer-Setup.exe)
- GIT Bash (https://git-scm.com/download/win)
Instalação:
1- Abrir o GIT Bash
2- correr o comando composer global require "laravel/installer"
3- correr o comando laravel new NomeDoProjecto
4- mudar o directório para o do projecto com cd NomeDoProjecto (podem escrever a primeira letra e clicar no TAB que ele dá auto-complete)
5- executar o comando php artisan serve e aceder a http://localhost:8000
Criação da Autenticação:
1- dar CTRL + C na consola para dar exit ao que está a decorrer
2- executar o comando php artisan make:auth
3- aceder novamente a http://localhost:8000 e verificar se os botões "login" e "register" estão lá
3.1- estes botões levam-vos a (não se registem, ainda não criamos a base de dados)
Ficheiros do projecto:
Ficheiro de configuração:
- O ficheiro .env é o ficheiro de configuração, alterem-o de vez com a vossa config da base de dados (não se esqueçam de criar o Schema/DB com o MySQL Workbench ou outra IDE de MySQL)
Routes:
- a pasta routes é utilizada pelo ficheiro web.php, este contem todo o mapeamento entre as views (output para o utilizador) e as funções (onde é corrido código PHP em segurança, dentro de um controlador)
ou com o comando php artisan route:list na consola
- Este ficheiro contém informação básica do mapeamento, como o método de execução (GET/POST, ou os utilizados em Rest API, os PUT/PATCH/DELETE), o directório onde vai ser chamada a route (o que quiserem) e a função que é executada ao aceder ao directório (NomeDoControlador@NomeDaFunção), com um nome que podem dar ao mapeamento, para mais tarde o chamarem se necessário.
Resources:
- Nesta categoria temos os layouts e views, que é o que podem chamar de páginas em HTML, ou páginas de output (visuais), que contêm tudo o que o utilizador vai conseguir ver
Exemplo de layout (páginas que têm o design base da página), chamada app.blade.php:
(o yield('NomeDoYield') é o que vai-vos poder fazer inserir HTML no sitio daquele Yield, num ficheiro completamente diferente)
Exemplo de view (página que chama um layout, ou não, é utilizada para coisas simples), chamada login.blade.php:
(como podem ver esta contém um @extends('layouts.app'), que chama o layout "app" que está dentro da pasta "layouts" e um @section('content') que serve para a framework saber que o que vem entre o inicio da section e o final é para ser inserido onde fizeram o Yield no layout)
Exemplo de código PHP dentro do ficheiro HTML:
(o ficheiro .blade.php deixa-nos correr PHP da forma mais simples possível, conseguindo aceder às classes que torna esta framework de tão grande valor. Aqui podemos ver uma lógica para mostrar a Home a utilizadores com Login já efectudado ou os botões Login e Register aos que estão Deslogados (guests), verificando se o ficheiro Routes que vimos anteriormente tem algum mapeamento com o name "login", se este tiver verificamos pela classe de autenticação Auth se o utilizador tem sessão iniciada, caso não tiver este mostra-lhe os botões de Guest)
Controllers:
(estes são os ficheiros onde são corridas as funções do projecto, podem criar os controladores que quiserem com o comando php artisan make:controller NomeDoController pela consola, para organizarem melhor o trabalho)
Exemplo de controlador:
(verificamos que neste controller temos a função index(), que quando é chamada na Route por "HomeController@index" retorna uma view chamada "home", este controlador é constituido pelo namespace que mais tarde direi o que é e para que serve, o import das packages utilizadas para o controlador e a classe em sí, que dá extend no Controller principal da framework)
Base de Dados:
(esta categoria é composta por 2 coisas importantes, as migrations que são constituidas por blueprints das tabelas, as seeds que armazenam tudo o que querem que já venha de dados na base de dados quando a importarem)
Porquê utilizar Migrations?
- Podem simplesmente criar uma máquina nova, correr o comando "php artisan migrate" e o "php artisan db:seed --class=DatabaseSeeder" que têm uma base de dados limpa e pronta a ser trabalhada, sem ter que exportar e importar seja o que for
Exemplo de migration (tabela users):
(esta blueprint é constituida sempre por duas funções, a função de criar e a de apagar a tabela, na de criar podemos ver o básico de uma tabela, começando com um ID em autoincrement, 3 tabelas de texto em que o EMAIL é único e um remembertoken + timestamp, que vem da framework, o token é gravado quando clicam no "Remember Me" ao fazer login e os timestamps vêm sempre com um "created_at" e "updated_at", que mais tarde digo-vos o porquê de ser absolutamente lindo)
Vamos lá fazer a migration das tabelas para a base de dados?
1- Incluir isto em App>Providers>AppServiceProvider.php
2- correr o comando "php artisan migrate"
3- done, já se podem registar pelo website
Exemplo de algo do dia a dia:
1- correr o comando php artisan make:controller UsersController
2- modificar o controlador
meter o use App\User para aceder ao modelo da tabela users
criar a função currentUsers() para retornar os utilizadores registados
executar um User::all() para ir buscar todos os registos da tabela users, e guardar-los na variável $users
retornar à view teste a variável $users com o nome de users, para poder ser acedida dentro da view
3- criar um ficheiro teste.blade.php em resources>views e editar-lo
4- mapear a função com o URL que querem
5- aceder a http://localhost:8000/teste e verificar se funcionou
Páginas importantes:
- Documentos (https://laravel.com/docs/5.4/)
- Queries (https://laravel.com/docs/5.4/queries)
- Laracasts (https://laracasts.com/series/laravel-5-from-scratch)
- Bom canal de youtube (https://www.youtube.com/user/codexecutable/playlists)
Tens alguma dúvida?
Acedam ao Discord da cyber (https://discord.gg/knEuRSt) e enviem-me um PM, terei todo o gosto em vos ajudar, seja em algum problema ou até mesmo em lógica