Thyago Maia Tavares de Farias
E se minha aplicação tiver mil rotas????
 Você não precisa criar todas as rotas no arquivo route.php!
 Podemos mapear um controller no arquivo de rotas e, a partir
dele, aplicar as rotas;
 Para isso:
 O nome do método no controller deve começar com um dos
verbos HTTP como getIsso, postAquilo, etc.;
 Para cada parâmetro passado na rota, devemos criar o
parâmetro correspondente no método controller;
 O melhor? O Laravel cria o controller para você automaticamente!!!
 Para isso, vá no seu terminal, acesse a partir dele a pasta
C:xampphtdocslaravel e digite o comando:
php artisan make:controller Rotas
 Um novo controller com o nome Rotas será criado em
app/Http/Controllers;
 Agora, só precisaremos de uma linha no arquivo de rotas:
Route::controller(‘rotas’, ’Rotas’);
 Abra o navegador, acesse http://laravel.app/rotas. Como ainda não
existe nenhum método de rota, será gerada uma exceção;
 Vamos atualizar nosso controller para que tenha um método padrão,
a ser executado quando nenhuma rota for especificada;
 No controller Rotas, adicione o seguinte método:
public function getIndex() {
return 'Olá, sou a rota padrão do controller!';
}
 Abra o navegador, acesse http://laravel.app/rotas
 Também podemos criar o nome que desejarmos para nossas rotas. Exemplo: Logo
abaixo do método getIndex, crie o método:
public function getRequisicao() {
return 'Olá, sou executado a partir de um GET';
}
 No arquivo de rotas, adicione a seguinte rota:
Route::get('/teste', ['uses' => ‘Rotas@getRequisicao']);
 Abra o navegador, acesse http://laravel.app/teste
Classes Laravel utilizadas para filtrar os dados de
entrada dos nossos sistemas;
Funciona como um filtro de requisição, que executa
ações antes ou depois de uma requisição HTTP;
 Exemplo: Podemos inserir um token CSRF em formulários implementados
em Views para que apenas nossos forms realizem requisições. Precisamos
religar esse recurso, retirando o comentário da linha de código que
implementa esse recurso no arquivo app/Http/Kernel.php;
 Exemplo: Agora, vamos criar nossa primeira View! Vá para a pasta resources/views e crie o
arquivo contato.blade.php. Edite-o com o seguinte código HTML:
<html>
<body>
<form method=“post” action=“enviar-contato”>
{{ csrf_field() }}
<p>Nome: <input type=“text” name=“nome”></p>
<p>Telefone: <input type=“text” name=“telefone”></p>
<p><input type=“submit” value=“enviar”></p>
</form>
</body>
</html>
 Exemplo: Agora, vamos criar nossa primeira View! Vá para a pasta resources/views e crie o
arquivo contato.blade.php. Edite-o com o seguinte código HTML:
<html>
<body>
<form method=“post” action=“enviar-contato”>
{{ csrf_field() }}
<p>Nome: <input type=“text” name=“nome”></p>
<p>Telefone: <input type=“text” name=“telefone”></p>
<p><input type=“submit” value=“enviar”></p>
</form>
</body>
</html>
Olha o middleware aqui gente!!!
Exemplo: Agora, vamos criar uma rota para chamar nosso
formulário de contato no arquivo de rotas:
Route::get('/contato', ['uses' =>
‘ContatoController@contato']);
Route::post('/enviar-contato', ['uses' =>
‘ContatoController@enviarContato']);
 Em seguida, criaremos o controller responsável por exibir e receber
dados do formulário;
 Para isso, vá no seu terminal, acesse a partir dele a pasta
C:xampphtdocslaravel e digite o comando:
php artisan make:controller ContatoController
 Um novo controller com o nome ContatoController será criado em
app/Http/Controllers;
 Precisaremos criar os métodos contato() e enviarContato(Request
$request) no controller em questão:
public function contato() {
return view(‘contato’);
}
public function enviarContato(Request $request) {
dd($request->all());
}
 Abra o navegador, acesse http://laravel.dev/contato
Até o momento, criamos uma controladora que
responde a requisições HTTP do tipo GET e POST;
Mas... E quando eu precisar responder outros tipos
de requisição, como PUT ou DELETE?;
 Exemplo: Vá no seu terminal, acesse a partir dele a pasta
C:xampphtdocslaravel e digite o comando:
php artisan make:controller BasicoController
 Um novo controller com o nome BasicoController será criado em
app/Http/Controllers;
 No controller BasicoController, adicione o seguinte método:
public function putBasico() {
return View(‘put’);
}
public function put (Request $request) {
echo("Nome digitado: " . $request->input('nome'));
}
Em seguida, vamos atualizar nosso arquivo de rotas:
Route::get('/put', ['uses' =>
‘BasicoController@putBasico']);
Route::put('/put', ['uses' =>
‘BasicoController@put']);
 Agora, começaremos a manipular a camada de visualização de
dados. Crie a view put.blade.php na pasta resource/views:
<html>
<body>
<form method="post" action=“/put">
{{ csrf_field() }}
<input type=“hidden” name=“_method” value=“PUT”>
<p>Nome: <input required type="text" name="nome"></p>
</form>
</body>
</html>
Abra o navegador e acesse http://laravel.dev/contato
 Uma outra forma de alterar o tipo de requisição em um form
HTML:
<html>
<body>
<form method="post" action=“/put">
{{ csrf_field() }}
{{ method_field(‘PUT’) }}
<p>Nome: <input required type="text" name="nome"></p>
</form>
</body>
</html>
Controllers também podem ser concebidas com o objetivo
de abstrair funcionalidades CRUD (Criação, Leitura,
Atualização e Exclusão);
O Laravel pode não só criar tais tipos de classe
automaticamente, como também as assinaturas de método
necessárias e associar um tipo de requisição para cada
método;
 Exemplo: Vá no seu terminal, acesse a partir dele a pasta
C:xampphtdocslaravel e digite o comando:
php artisan make:controller LivroController
 Um novo controller com o nome LivroController será criado em
app/Http/Controllers;
 OBS.: Os alunos com o Homestead deverão digitar --resource
no final do comando!
 Verifique que o Laravel já criou as assinaturas de método de CRUD
automaticamente:
 index()
 create()
 store(Request $request)
 show($id)
 edit($id)
 update(Request $request, $id)
 destroy($id)
 Outro poder de controladoras de recurso é a simplificação do registro
de rotas. Continuando nosso exemplo, acesse o arquivo de rotas e
registre a seguinte rota:
Route::resource(‘livro', ‘LivroController’);
 Com esse registro de rota, o Laravel automaticamente atribui as
seguintes requisições HTTP e as rotas para cada método da
controladora de recurso:
Tipo URI Ação
GET /livro index
GET /livro/create create
POST /livro store
GET /livro/{pagina} show
GET /livro/{pagina}/edit edit
PUT/PATCH /livro/{pagina} update
DELETE /livro/{pagina} destroy
 Continuando o exemplo, no controller LivroController, edite os
seguintes métodos:
public function index() {
return ‘Olá, usuário!’;
}
public function create () {
return ‘Aqui acessarei views para a inserção de dados!’;
}
 As Views são classe do Modelo MVC responsáveis pela exibição
de dados para o usuário após um determinado processamento;
 O Blade é o motor de renderização que o Laravel adota
(notaram o .blade inserido no nome dos arquivos de view?);
 O Blade permite uma sintaxe mais enxuta na criação de
layouts, além de disponibilizar comandos para a geração de
conteúdo dinâmico (geralmente começam por @);
 Exemplo: O Blade permite ao programador definir seções de página de forma muito
simples. Crie na pasta /resource/views a view layout.blade.php:
<html>
<body>
@section(‘sidebar’)
Este é o sidebar da página
@show
<div>Olá, @yield(‘content’)!</div>
</body>
</html>
 Continuando nosso exemplo, acesse o arquivo de rotas e registre a
seguinte rota:
Route::get('/layout', function() {
return view('layout');
});
 Abra o navegador e acesse http://laravel.dev/layout
 Exemplo: O Blade permite ao programador reutilizar outras views na criação de
novas views. Crie na pasta /resource/views a view pagina1.blade.php:
@extends(‘layout’)
 Continuando nosso exemplo, acesse o arquivo de rotas, adicione a
seguinte rota e acesse http://laravel.dev/pagina1 :
Route::get('/pagina1', function() {
return view(‘pagina1');
});
 Exemplo: O Blade permite ao programador sobrescrever dados de
Views. Crie na pasta /resource/views a view pagina2.blade.php:
@extends(‘layout’)
@section(‘sidebar’)
Esse é o novo sidebar da página 2!!!!
@endsection
Continuando nosso exemplo, acesse o arquivo de rotas,
adicione a seguinte rota e acesse http://laravel.dev/pagina2
:
Route::get('/pagina2', function() {
return view(‘pagina2');
});
 Exemplo: O Blade permite ao programador inserir dados em Views.
Atualize a view pagina2.blade.php e acesse http://laravel.dev/pagina2 :
@extends(‘layout’)
@section(‘sidebar’)
Esse é o novo sidebar da página 2!!!!
@endsection
@section(‘content’)
Leão da Ilha do Retiro
@endsection
Recursos dinâmicos fornecidos pelo Blade
É possível utilizar PHP puro nas views para geração
de conteúdo dinâmico. Mas isso é uma boa prática???
O ideal é só inserir scripts PHP nos controllers e models!
O Blade fornece uma sintaxe e instruções que tornam
a codificação de Views mais enxuta e organizada;
Exemplo: Acesse o arquivo de rotas e registre a
seguinte rota:
Route::get('/exibir-dados', function() {
return view(‘exibindo_dados');
});
Crie na pasta /resource/views a view
exibindo_dados.blade.php e acesse
http://laravel.dev/exibir-dados :
<h1>{{ $titulo or ‘Título não encontrado’ }}</h1>
<p>{{ $texto or ‘Texto não encontrado’ }}</p>
If/else muito enxuto!
 Exemplo: Agora, acesse o arquivo de rotas , atualize a rota
exibir-dados e acesse http://laravel.dev/exibir-dados :
Route::get('/exibir-dados', function() {
return view(‘exibindo_dados‘, [
‘titulo’ => ‘Meu Blog’,
‘texto’ => ‘Sejam bem vindos!’,
]);
});
O Blade também permite escapar dados de
maneira simples;
Escapar dados é muito importante por questões de
segurança. Assim, evitamos que o usuário envie
dados maliciosos a partir de técnicas como SQL
injection e XSS;
Exemplo: Acesse o arquivo de rotas e registre a
seguinte rota:
Route::get('/nao-esc', function() {
return view(‘exibindo‘, [
‘conteudo’ => ‘<h1>Sport</h1>’
]);
});
Crie na pasta /resource/views a view exibindo.blade.php e
acesse http://laravel.dev/nao-esc :
{{ $conteudo }}
Sem escape, as tags HTML que foram enviadas como
parâmetros de view foram enviadas para a aplicação (eu
poderia ter enviado um Javascript malicioso, concorda?);
Agora edite a view exibindo.blade.php e acesse
http://laravel.dev/nao-esc :
{!! $conteudo !!}
Com escape, as tags HTML que foram enviadas como
parâmetros de view foram “escapadas”;
O Blade também permite inserir estruturas de
controle e repetição em views;
Tais estruturas auxiliam na geração de conteúdo
dinâmico a partir de uma sintaxe bastante enxuta;
Exemplo: Acesse o arquivo de rotas e registre a
seguinte rota:
Route::get('/se', function() {
return view(‘vazio‘, [
‘lista’ => []
]);
});
Agora edite a view vazio.blade.php e acesse
http://laravel.dev/se :
@if(count($lista) == 0)
<p>Não existe dados na lista</p>
@else
<p>Existem dados na lista</p>
@endif

Desenvolvimento de sistemas web com PHP Frameworks - Aula 2

  • 1.
  • 3.
    E se minhaaplicação tiver mil rotas????  Você não precisa criar todas as rotas no arquivo route.php!  Podemos mapear um controller no arquivo de rotas e, a partir dele, aplicar as rotas;  Para isso:  O nome do método no controller deve começar com um dos verbos HTTP como getIsso, postAquilo, etc.;  Para cada parâmetro passado na rota, devemos criar o parâmetro correspondente no método controller;
  • 4.
     O melhor?O Laravel cria o controller para você automaticamente!!!  Para isso, vá no seu terminal, acesse a partir dele a pasta C:xampphtdocslaravel e digite o comando: php artisan make:controller Rotas  Um novo controller com o nome Rotas será criado em app/Http/Controllers;
  • 5.
     Agora, sóprecisaremos de uma linha no arquivo de rotas: Route::controller(‘rotas’, ’Rotas’);  Abra o navegador, acesse http://laravel.app/rotas. Como ainda não existe nenhum método de rota, será gerada uma exceção;  Vamos atualizar nosso controller para que tenha um método padrão, a ser executado quando nenhuma rota for especificada;
  • 6.
     No controllerRotas, adicione o seguinte método: public function getIndex() { return 'Olá, sou a rota padrão do controller!'; }  Abra o navegador, acesse http://laravel.app/rotas
  • 7.
     Também podemoscriar o nome que desejarmos para nossas rotas. Exemplo: Logo abaixo do método getIndex, crie o método: public function getRequisicao() { return 'Olá, sou executado a partir de um GET'; }  No arquivo de rotas, adicione a seguinte rota: Route::get('/teste', ['uses' => ‘Rotas@getRequisicao']);  Abra o navegador, acesse http://laravel.app/teste
  • 9.
    Classes Laravel utilizadaspara filtrar os dados de entrada dos nossos sistemas; Funciona como um filtro de requisição, que executa ações antes ou depois de uma requisição HTTP;
  • 10.
     Exemplo: Podemosinserir um token CSRF em formulários implementados em Views para que apenas nossos forms realizem requisições. Precisamos religar esse recurso, retirando o comentário da linha de código que implementa esse recurso no arquivo app/Http/Kernel.php;
  • 11.
     Exemplo: Agora,vamos criar nossa primeira View! Vá para a pasta resources/views e crie o arquivo contato.blade.php. Edite-o com o seguinte código HTML: <html> <body> <form method=“post” action=“enviar-contato”> {{ csrf_field() }} <p>Nome: <input type=“text” name=“nome”></p> <p>Telefone: <input type=“text” name=“telefone”></p> <p><input type=“submit” value=“enviar”></p> </form> </body> </html>
  • 12.
     Exemplo: Agora,vamos criar nossa primeira View! Vá para a pasta resources/views e crie o arquivo contato.blade.php. Edite-o com o seguinte código HTML: <html> <body> <form method=“post” action=“enviar-contato”> {{ csrf_field() }} <p>Nome: <input type=“text” name=“nome”></p> <p>Telefone: <input type=“text” name=“telefone”></p> <p><input type=“submit” value=“enviar”></p> </form> </body> </html> Olha o middleware aqui gente!!!
  • 13.
    Exemplo: Agora, vamoscriar uma rota para chamar nosso formulário de contato no arquivo de rotas: Route::get('/contato', ['uses' => ‘ContatoController@contato']); Route::post('/enviar-contato', ['uses' => ‘ContatoController@enviarContato']);
  • 14.
     Em seguida,criaremos o controller responsável por exibir e receber dados do formulário;  Para isso, vá no seu terminal, acesse a partir dele a pasta C:xampphtdocslaravel e digite o comando: php artisan make:controller ContatoController  Um novo controller com o nome ContatoController será criado em app/Http/Controllers;
  • 15.
     Precisaremos criaros métodos contato() e enviarContato(Request $request) no controller em questão: public function contato() { return view(‘contato’); } public function enviarContato(Request $request) { dd($request->all()); }  Abra o navegador, acesse http://laravel.dev/contato
  • 17.
    Até o momento,criamos uma controladora que responde a requisições HTTP do tipo GET e POST; Mas... E quando eu precisar responder outros tipos de requisição, como PUT ou DELETE?;
  • 18.
     Exemplo: Váno seu terminal, acesse a partir dele a pasta C:xampphtdocslaravel e digite o comando: php artisan make:controller BasicoController  Um novo controller com o nome BasicoController será criado em app/Http/Controllers;
  • 19.
     No controllerBasicoController, adicione o seguinte método: public function putBasico() { return View(‘put’); } public function put (Request $request) { echo("Nome digitado: " . $request->input('nome')); }
  • 20.
    Em seguida, vamosatualizar nosso arquivo de rotas: Route::get('/put', ['uses' => ‘BasicoController@putBasico']); Route::put('/put', ['uses' => ‘BasicoController@put']);
  • 21.
     Agora, começaremosa manipular a camada de visualização de dados. Crie a view put.blade.php na pasta resource/views: <html> <body> <form method="post" action=“/put"> {{ csrf_field() }} <input type=“hidden” name=“_method” value=“PUT”> <p>Nome: <input required type="text" name="nome"></p> </form> </body> </html>
  • 22.
    Abra o navegadore acesse http://laravel.dev/contato
  • 23.
     Uma outraforma de alterar o tipo de requisição em um form HTML: <html> <body> <form method="post" action=“/put"> {{ csrf_field() }} {{ method_field(‘PUT’) }} <p>Nome: <input required type="text" name="nome"></p> </form> </body> </html>
  • 25.
    Controllers também podemser concebidas com o objetivo de abstrair funcionalidades CRUD (Criação, Leitura, Atualização e Exclusão); O Laravel pode não só criar tais tipos de classe automaticamente, como também as assinaturas de método necessárias e associar um tipo de requisição para cada método;
  • 26.
     Exemplo: Váno seu terminal, acesse a partir dele a pasta C:xampphtdocslaravel e digite o comando: php artisan make:controller LivroController  Um novo controller com o nome LivroController será criado em app/Http/Controllers;  OBS.: Os alunos com o Homestead deverão digitar --resource no final do comando!
  • 27.
     Verifique queo Laravel já criou as assinaturas de método de CRUD automaticamente:  index()  create()  store(Request $request)  show($id)  edit($id)  update(Request $request, $id)  destroy($id)
  • 28.
     Outro poderde controladoras de recurso é a simplificação do registro de rotas. Continuando nosso exemplo, acesse o arquivo de rotas e registre a seguinte rota: Route::resource(‘livro', ‘LivroController’);
  • 29.
     Com esseregistro de rota, o Laravel automaticamente atribui as seguintes requisições HTTP e as rotas para cada método da controladora de recurso: Tipo URI Ação GET /livro index GET /livro/create create POST /livro store GET /livro/{pagina} show GET /livro/{pagina}/edit edit PUT/PATCH /livro/{pagina} update DELETE /livro/{pagina} destroy
  • 30.
     Continuando oexemplo, no controller LivroController, edite os seguintes métodos: public function index() { return ‘Olá, usuário!’; } public function create () { return ‘Aqui acessarei views para a inserção de dados!’; }
  • 32.
     As Viewssão classe do Modelo MVC responsáveis pela exibição de dados para o usuário após um determinado processamento;  O Blade é o motor de renderização que o Laravel adota (notaram o .blade inserido no nome dos arquivos de view?);  O Blade permite uma sintaxe mais enxuta na criação de layouts, além de disponibilizar comandos para a geração de conteúdo dinâmico (geralmente começam por @);
  • 33.
     Exemplo: OBlade permite ao programador definir seções de página de forma muito simples. Crie na pasta /resource/views a view layout.blade.php: <html> <body> @section(‘sidebar’) Este é o sidebar da página @show <div>Olá, @yield(‘content’)!</div> </body> </html>
  • 34.
     Continuando nossoexemplo, acesse o arquivo de rotas e registre a seguinte rota: Route::get('/layout', function() { return view('layout'); });  Abra o navegador e acesse http://laravel.dev/layout
  • 35.
     Exemplo: OBlade permite ao programador reutilizar outras views na criação de novas views. Crie na pasta /resource/views a view pagina1.blade.php: @extends(‘layout’)  Continuando nosso exemplo, acesse o arquivo de rotas, adicione a seguinte rota e acesse http://laravel.dev/pagina1 : Route::get('/pagina1', function() { return view(‘pagina1'); });
  • 36.
     Exemplo: OBlade permite ao programador sobrescrever dados de Views. Crie na pasta /resource/views a view pagina2.blade.php: @extends(‘layout’) @section(‘sidebar’) Esse é o novo sidebar da página 2!!!! @endsection
  • 37.
    Continuando nosso exemplo,acesse o arquivo de rotas, adicione a seguinte rota e acesse http://laravel.dev/pagina2 : Route::get('/pagina2', function() { return view(‘pagina2'); });
  • 38.
     Exemplo: OBlade permite ao programador inserir dados em Views. Atualize a view pagina2.blade.php e acesse http://laravel.dev/pagina2 : @extends(‘layout’) @section(‘sidebar’) Esse é o novo sidebar da página 2!!!! @endsection @section(‘content’) Leão da Ilha do Retiro @endsection
  • 39.
  • 40.
    É possível utilizarPHP puro nas views para geração de conteúdo dinâmico. Mas isso é uma boa prática??? O ideal é só inserir scripts PHP nos controllers e models! O Blade fornece uma sintaxe e instruções que tornam a codificação de Views mais enxuta e organizada;
  • 41.
    Exemplo: Acesse oarquivo de rotas e registre a seguinte rota: Route::get('/exibir-dados', function() { return view(‘exibindo_dados'); });
  • 42.
    Crie na pasta/resource/views a view exibindo_dados.blade.php e acesse http://laravel.dev/exibir-dados : <h1>{{ $titulo or ‘Título não encontrado’ }}</h1> <p>{{ $texto or ‘Texto não encontrado’ }}</p> If/else muito enxuto!
  • 43.
     Exemplo: Agora,acesse o arquivo de rotas , atualize a rota exibir-dados e acesse http://laravel.dev/exibir-dados : Route::get('/exibir-dados', function() { return view(‘exibindo_dados‘, [ ‘titulo’ => ‘Meu Blog’, ‘texto’ => ‘Sejam bem vindos!’, ]); });
  • 44.
    O Blade tambémpermite escapar dados de maneira simples; Escapar dados é muito importante por questões de segurança. Assim, evitamos que o usuário envie dados maliciosos a partir de técnicas como SQL injection e XSS;
  • 45.
    Exemplo: Acesse oarquivo de rotas e registre a seguinte rota: Route::get('/nao-esc', function() { return view(‘exibindo‘, [ ‘conteudo’ => ‘<h1>Sport</h1>’ ]); });
  • 46.
    Crie na pasta/resource/views a view exibindo.blade.php e acesse http://laravel.dev/nao-esc : {{ $conteudo }} Sem escape, as tags HTML que foram enviadas como parâmetros de view foram enviadas para a aplicação (eu poderia ter enviado um Javascript malicioso, concorda?);
  • 47.
    Agora edite aview exibindo.blade.php e acesse http://laravel.dev/nao-esc : {!! $conteudo !!} Com escape, as tags HTML que foram enviadas como parâmetros de view foram “escapadas”;
  • 48.
    O Blade tambémpermite inserir estruturas de controle e repetição em views; Tais estruturas auxiliam na geração de conteúdo dinâmico a partir de uma sintaxe bastante enxuta;
  • 49.
    Exemplo: Acesse oarquivo de rotas e registre a seguinte rota: Route::get('/se', function() { return view(‘vazio‘, [ ‘lista’ => [] ]); });
  • 50.
    Agora edite aview vazio.blade.php e acesse http://laravel.dev/se : @if(count($lista) == 0) <p>Não existe dados na lista</p> @else <p>Existem dados na lista</p> @endif