Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aplicações Web Modernas com Laravel

Aplicações Web Modernas com Laravel

Laravel é um framework PHP moderno, com baixa curva de aprendizado, altamente produtivo e segue boas práticas de desenvolvimento de software. A palestra aborda o PHP moderno, o Composer e o Laravel em detalhes. Dentre os assuntos, fala-se da motivação do framework, rotas, controllers, models e views, validação de dados, banco de dados e migrations, comandos do Artisan, testes, gerenciamento de assets com o Elixir, ambientes de desenvolvimento e deploy e referências.

52711e2157a6fed933b0361cc06a6953?s=128

Marcel dos Santos

November 05, 2016
Tweet

Transcript

  1. Marcel Gonçalves dos Santos @marcelgsantos modernas aplicações web com Laravel

  2. pensandonaweb.com.br desenvolvedor web full-stack Marcel Gonçalves dos Santos @marcelgsantos

  3. None
  4. @phpsp phpsp.org.br

  5. @femugsp sp.femug.com

  6. Learning OOP in PHP Tutoriais, vídeos, slides, livros sobre OOP,

    OOD, design patterns, refatoração e arquitetura. bit.ly/Learning-OOP-in-PHP
  7. Por que Laravel?

  8. framework moderno

  9. possui baixa curva de aprendizagem

  10. altamente produtivo

  11. foco nas boas práticas de desenvolvimento de software

  12. utiliza as principais funcionalidades e novidades da linguagem e ecossistema

    PHP
  13. Renovação do PHP

  14. o PHP está moderno

  15. é uma das linguagens mais importantes da web

  16. utilizado por grandes empresas e projetos de código aberto

  17. None
  18. orientação a objetos sólida e robusta

  19. funcionalidades como closures, generators e traits

  20. iniciativas de padronização com o PHP-FIG e as PSRs

  21. gerenciamento de dependências com o Composer

  22. repositório de bibliotecas vasto e confiável com o Packagist

  23. comunidade fora de série

  24. comunidade fora de série

  25. continua evoluindo o PHP 7.1 está saindo do forno!

  26. O que é um framework?

  27. um framework é utilizado para solucionar um tipo específico de

    problema
  28. um framework web é utilizado para a criação de aplicações

    web
  29. conjunto de classes que possui arquitetura e organização pré-definida

  30. possui uma variedade de funcionalidades comuns

  31. camada de acesso a banco de dados, gerenciamento de sessão,

    validação, …
  32. um framework web pode ser visto como o esqueleto de

    uma aplicação
  33. possui partes fixas e 
 partes variáveis

  34. Instalação

  35. instalação utilizando o Composer

  36. ➜ composer create-project laravel/laravel blog
 —-prefer-dist

  37. None
  38. rodar a aplicação

  39. ➜ php -S localhost:8000 -t public

  40. php -S localhost:8000 -t public

  41. utiliza o servidor web embutido do PHP

  42. ➜ php artisan serve

  43. possui estrutura de diretórios definida

  44. None
  45. None
  46. Rotas, controllers, models e views

  47. as rotas são as portas de entrada da sua aplicação

  48. são mapeadas para closures e controllers

  49. Route::get('/', function () { return 'Hello world! ;)'; });

  50. aceitam parâmetros

  51. Route::get('/hello/{name}', function ($name) { return "Hello $name!"; });

  52. respondem métodos HTTP

  53. são organizadas em rotas web e api

  54. os controllers são responsáveis por receber e responder as requisições

  55. // app/Http/Controllers/AboutController.php namespace App\Http\Controllers; use Illuminate\Http\Request; class AboutController extends Controller

    { return 'about'; }
  56. // routes/web.php Route::get(‘/about', 'AboutController@index');

  57. ➜ php artisan make:controller AboutController

  58. a view é responsável pela lógica de apresentação da sua

    aplicação
  59. contém tags HTML e exibe dados passados pela sua aplicação

  60. <!-- resources/views/hello.blade.php --> <html> <body> <h1>Hello, {{ $name }}!</h1> </body>

    </html>
  61. Route::get('/hello', function () { return view('hello', ['name' => 'John']); });

  62. podem ser organizadas em sub-diretórios

  63. Artisan

  64. o Artisan é a ferramenta de linha de comando do

    Laravel
  65. ➜ php artisan

  66. pode ser utilizado para inúmeras tarefas no Laravel

  67. listar as rotas disponíveis, criar controllers, rodar as migrations, agendar

    comandos,…
  68. Blade

  69. o Blade é a engine de template do Laravel

  70. <!-- resources/views/hello.blade.php --> <html> <body> <h1>Hello, {{ $name }}!</h1> </body>

    </html>
  71. o template é compilado e cacheado

  72. permite a utilização de qualquer código PHP

  73. melhor flexibilidade e reaproveitamento

  74. herança de template

  75. <!-- resources/views/layouts/app.blade.php --> <html> <head> <title>App Name - @yield('title')</title> </head>

    <body> @section('sidebar') This is the master sidebar. @show <div class="container"> @yield('content') </div> </body> </html>
  76. <!-- resources/views/child.blade.php --> @extends('layouts.app') @section('title', 'Page Title') @section('sidebar') @parent <p>This

    is appended to the master sidebar.</p> @endsection @section('content') <p>This is my body content.</p> @endsection
  77. para exibir dados utiliza-se {{ }}

  78. <!-- resources/views/hello.blade.php --> <html> <body> <h1>Hello, {{ $name }}!</h1> </body>

    </html>
  79. faz o escape para a proteção contra ataques XSS

  80. o Blade permite utilizar estruturas de controle e laços

  81. permite incluir sub-views ou partials

  82. <div> @include(‘partials.message') <form> <!-- Form Contents --> </form> </div>

  83. Ambientes e configuração

  84. o Laravel utiliza conceito de ambientes de desenvolvimento

  85. utilize variáveis de ambientes em arquivos de configuração

  86. dados sensíveis não devem ficar nos arquivos de configuração

  87. // config/database.php 'mysql' => [ 'driver' => 'mysql', 'host' =>

    env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ]
  88. os arquivos de configuração podem ser versionados normalmente

  89. dados sensíveis devem ser adicionados manualmente no servidor ou no

    arquivo .env que não é versionado
  90. // .env APP_ENV=local APP_KEY=base64:k1vE7ywsFOAScwVIxJqOdAAqG4SNpg lyb3Lr1eIbfQk= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=127.0.0.1

    DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
  91. Migrations, banco de dados e o Eloquent

  92. as migrations são o controle de versão para a base

    de dados
  93. ajudam manter a consistência entre as alterações da base de

    dados entre os desenvolvedores
  94. são classes que representam comandos para fazer e desfazer alterações

    em uma base de dados
  95. // database/migrations/2014_10_12_000000_create_users_table.php class CreateUsersTable extends Migration { public function up()

    { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } public function down() { Schema::drop('users'); } }
  96. para aplicar uma migration

  97. ➜ php artisan migrate

  98. para reverter uma migration

  99. ➜ php artisan migrate:rollback

  100. uma migration deve ter um nome bastante expressivo

  101. o Laravel mantém uma tabela especial para o gerenciamento das

    migrations
  102. Acesso a base de dados com Eloquent

  103. Eloquent é um implementação do padrão Active Record para o

    Laravel
  104. uma classe representa um registro da tabela associada

  105. // app/Article.php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model

    { // }
  106. para uma tabela chamada articles haverá uma model chamada Article

  107. ➜ php artisan make:model Article

  108. ao estender a classe Model do Eloquent, são herdados diversos

    métodos como find, update, save entre outros
  109. Gerenciamento de assets com Elixir

  110. Elixir é a solução do Laravel para o gerenciamento de

    assets
  111. ele utiliza Node.js, NPM e Gulp

  112. é necessário a instalação das dependências do Node.js

  113. o Laravel fornece um arquivo package.json de sugestão

  114. // package.json { "private": true, "scripts": { "prod": "gulp --production",

    "dev": "gulp watch" }, "devDependencies": { "bootstrap-sass": "^3.3.7", "gulp": "^3.9.1", "jquery": "^3.1.0", "laravel-elixir": "^6.0.0-9" } }
  115. ➜ npm install

  116. // gulpfile.js const elixir = require('laravel-elixir'); elixir(mix => { mix.sass('app.scss')

    .scripts('app.js'); });
  117. torna a automatização de tarefas bastante simples e expressiva

  118. realiza, por padrão, a compilação do arquivo Sass app.scss localizado

    em resources/assets/sass/
  119. e inúmeras tarefas como concatenar scripts, bundling de arquivos, source

    mapping, cache busting…
  120. o Elixir disponibiliza, por padrão, as tarefas gulp, gulp watch

    e gulp --production
  121. Testes

  122. os testes são parte integrante do Laravel

  123. possui suporte a testes por padrão com o PHPUnit

  124. inclui métodos auxiliares para ajudar nos testes

  125. // tests/ExampleTest.php use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseTransactions; class ExampleTest

    extends TestCase { public function testBasicExample() { $this->visit('/') ->see('Laravel'); } }
  126. ➜ php artisan make:test UserTest

  127. Referências

  128. * laravel.com/docs * laracasts.com * www.youtube.com/user/vedovelli * phpsp.slack.com * laravel-br.slack.com

  129. Avalie!

  130. Perguntas?

  131. Obrigado. @marcelgsantos speakerdeck.com/marcelgsantos