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

Wprowadzenie do Laravel'a

Wprowadzenie do Laravel'a

Introduction to Laravel talk I gave at Wake Up! 2018. It was held in Polish

DCzajkowski

April 22, 2018
Tweet

More Decks by DCzajkowski

Other Decks in Programming

Transcript

  1. PHP

  2. PHP

  3. PHP

  4. PHP

  5. PHP

  6. PHP

  7. PHP

  8. PHP

  9. <?php class Person { protected $name; protected $age; public function

    __construct($name, $age) { $this->name = $name; $this->age = $age; } }
  10. <?php class Person { protected $name; protected $age; public function

    __construct($name, $age) { $this->name = $name; $this->age = $age; } public function name() { } }
  11. <?php class Person { protected $name; protected $age; public function

    __construct($name, $age) { $this->name = $name; $this->age = $age; } public function name() { return $this->name; } }
  12. <?php class Person { protected $name; protected $age; public function

    __construct($name, $age) { $this->name = $name; $this->age = $age; } public function name() { return $this->name; } } $person = new Person('Darek', 20);
  13. <?php class Person { protected $name; protected $age; public function

    __construct($name, $age) { $this->name = $name; $this->age = $age; } public function name() { return $this->name; } } $person = new Person('Darek', 20); echo $person->name(); // Darek
  14. PHP JEST ŁATWE ▸ Bardzo szybka instalacja ▸ Brak kompilacji

    ▸ Brak dodatkowych wymagań ▸ Bardzo prosta integracja z HTML
  15. $ touch index.php $ echo "<?php echo 'Hello World!';" >

    index.php $ php index.php Hello World!
  16. MODEL-VIEW-CONTROLLER MVC W PRAKTYCE ▸ Model - jest pewną reprezentacją

    problemu bądź logiki aplikacji. ▸ Widok - warstwa prezentacyjna aplikacji. Odpowiada za to, jak wyświetlić pewną część modelu w ramach interfejsu użytkownika.
  17. MODEL-VIEW-CONTROLLER MVC W PRAKTYCE ▸ Model - jest pewną reprezentacją

    problemu bądź logiki aplikacji. ▸ Widok - warstwa prezentacyjna aplikacji. Odpowiada za to, jak wyświetlić pewną część modelu w ramach interfejsu użytkownika. ▸ Kontroler - funkcja otrzymująca zapytanie (ang. Request), przetwarzająca, a następnie dająca odpowiedź (ang. Response).
  18. // routes/web.php Route::get('/', function () { return 'Hello World!'; });

    Route::get('/users', function () { return view('users'); }); Route::post('/users', 'UsersController@store');
  19. // app/Http/Controllers/UsersController.php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; class UsersController extends Controller

    { public function store() { DB::table('users')->insert([ 'name' => 'John Doe', 'email' => '[email protected]', ]); return redirect()->back(); } }
  20. // app/Http/Controllers/UsersController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class UsersController

    extends Controller { public function store(Request $request) { DB::table('users')->insert([ 'name' => 'John Doe', 'email' => '[email protected]', ]); return redirect()->back(); } }
  21. // app/Http/Controllers/UsersController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class UsersController

    extends Controller { public function store(Request $request) { DB::table('users')->insert([ 'name' => $request->name, 'email' => $request->email, ]); return redirect()->back(); } }
  22. // app/Http/Controllers/UsersController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class UsersController

    extends Controller { public function store(Request $request) { DB::table('users')->insert([ 'name' => $request->name, 'email' => $request->email, ]); return redirect()->back(); } }
  23. // routes/web.php Route::get('/', function () { return 'Hello World!'; });

    Route::get('/users', function () { return view('users'); }); Route::post('/users', 'UsersController@store');
  24. // app/Http/Controllers/UsersController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class UsersController

    extends Controller { public function store(Request $request) { DB::table('users')->insert([ 'name' => $request->name, 'email' => $request->email, ]); return redirect()->back(); } }
  25. // app/Http/Controllers/UsersController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; class UsersController

    extends Controller { public function store(Request $request) { User::create([ 'name' => $request->name, 'email' => $request->email, ]); return redirect()->back(); } }
  26. // app/Http/Controllers/UsersController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; class UsersController

    extends Controller { public function store(Request $request) { User::create($request); return redirect()->back(); } }
  27. // app/Http/Controllers/UsersController.php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; class UsersController

    extends Controller { public function store(Request $request) { User::create($request); return redirect()->back(); } }
  28. // app/User.php namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; class User

    extends Authenticatable { /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; }
  29. XSS

  30. TDD

  31. CO BĘDZIEMY POTRZEBOWAĆ? ▸ PHP 7.2 ▸ Dowolną bazę SQL

    (MySQL) ▸ opcjonalnie — Git i konto na GitHub
  32. CO BĘDZIEMY POTRZEBOWAĆ? ▸ PHP 7.2 ▸ Dowolną bazę SQL

    (MySQL) ▸ opcjonalnie — Git i konto na GitHub ▸ opcjonalnie — Konto na Heroku
  33. <?php namespace App\Http\Controllers\Auth; use Socialite; class LoginController extends Controller {

    /** GET login/github */ public function redirectToProvider() { return Socialite::driver('github')->redirect(); } /** GET login/github/callback */ public function handleProviderCallback() { $user = Socialite::driver('github')->user(); // $user->token; } }
  34. <?php namespace Tests\Browser; use ...; class ExampleTest extends DuskTestCase {

    use DatabaseMigrations; public function testBasicExample() { $user = factory(User::class)->create([ 'email' => '[email protected]', ]); $this->browse(function ($browser) use ($user) { $browser->visit('/login') ->type('email', $user->email) ->type('password', 'secret') ->press('Login') ->assertPathIs('/home'); }); } }