Advertisement
Advertisement

More Related Content

Advertisement

More from Joe Ferguson(20)

Advertisement

MidwestPHP 2016 - Adventures in Laravel 5

  1. Adventures in Laravel 5 https://joind.in/talk/d0f4a Joe Ferguson https://github.com/svpernova09/quickstart-basic Want to follow along?
  2. Who Am I? Joe Ferguson PHP Developer Twitter: @JoePFerguson Organizer of @MemphisPHP @NomadPHP Lightning Talks PHP FIG Secretary Passionate about Community
  3. Getting Started with Laravel https://github.com/svpernova09/quickstart-basic Want to follow along?
  4. Database, Migrations, Seeding database/ factories/ - Default Model Attributes migrations/ - Version control for your DB Schema seeds/ - Sample / Test Data for your DB
  5. Database, Migrations, Seeding
  6. Routing app/ Http/ routes.php
  7. Layouts resources/ views/ layouts/ app.blade.php
  8. Views resources/ views/ tasks.blade.php
  9. Open Laravel-5.2-basic-quickstart
  10. Basic Quick Start https://laravel.com/docs/5.2/quickstart If you already have Vagrant, Run: `./vendor/bin/homestead make` `vagrant up` Run the migration: `php artisan migrate`
  11. Viewing the Migration Laravel-5.2-basic-quickstart/ database/ migrations/ 2015_10_27_141258_create_tasks_table.php
  12. Viewing the Model Laravel-5.2-basic-quickstart/app/Task.php
  13. Viewing the Routes Laravel-5.2-basic-quickstart/app/Http/routes.php
  14. Exercise 1 Add / edit migration to create tasks table Add / edit Task model Add routes (just like task) Add / edit Views You can safely disregard any authentication related to users
  15. Exercise 1 Task Migration
  16. Exercise 1 Task Model
  17. Exercise 1 Task Create Route
  18. Exercise 1 Task Delete Route
  19. Exercise 1 Task View
  20. Exercise 1 Task Create View
  21. Exercise 2 Assign users to tasks as you create tasks When listing tasks, show the user they have assigned them When listing users, show how many tasks they have assigned to that user You can safely disregard any authentication related to users
  22. Exercise 2 Task Migration
  23. Exercise 2 Model Relationships Task Model User Model
  24. Exercise 2 Show Assigned User
  25. Exercise 2 Count User’s Tasks
  26. Exercise 3 Write Tests for User Functionality Write Tests for Task Functionality
  27. Exercise 3 Hints Use Model Factories to seed test data Make sure the task is saved to the DB Make sure the user is saved to the DB Ensure the user delete request succeeds Ensure the task delete request succeeds Ensure the index page loads and contains data You can safely disregard any authentication related to users
  28. Exercise 3 ModelFactory
  29. Exercise 3 Make sure the task is saved to the DB
  30. Exercise 3 Make sure the user is saved to the DB
  31. Exercise 3 Ensure the user delete request succeeds
  32. Exercise 3 Ensure the task delete request succeeds
  33. Exercise 3 Ensure the index page loads
  34. Exercise 3 Ensure the index page contains data
  35. Easy Stuff Right?
  36. Let’s clean up a bit
  37. Exercise 4 Move “Create” Forms to own views Move “Current” html to own views Move Create/Delete User Functionality to Controller method Move Create/Delete Task Functionality to Controller method
  38. Exercise 4 Move “Create” Forms to own views
  39. Exercise 4 Move “Current” html to own views
  40. Exercise 4 Move Create/Delete User Functionality to Controller method
  41. Exercise 4 Move Create/Delete Task Functionality to Controller method
  42. Using Laravel Facades Using Static Methods: `User::all()` `User::find(1); `User::where(‘user_id`, 1)->get() `User::where(‘email’, ‘joe@joeferguson.me’)->get();
  43. Using Dependency Injection Using Injected Object `$this->user->all()` `$this->user->find(1); `$this->user->where(‘user_id`, 1)->get() `$this->user->where(‘email’, ‘joe@joeferguson.me’)->get();
  44. Exercise 5 Update your controllers to inject your models instead of using static methods (Facades)
  45. Exercise 5 Using Static Dependency Injection
  46. Exercise 6 Implement index view for tasks Implement index view for users Implement edit functionality for tasks Add tests for your new routes & methods
  47. Exercise 6 Implement index view for users Route Controller
  48. Exercise 6 Implement index view for tasks Route Controller
  49. Exercise 6 Implement edit functionality for tasks Route Controller
  50. Exercise 6 Handle Edit Form Route Controller
  51. What’s “TaskStoreRequest”?
  52. Laravel Form Request
  53. Whirlwind tour on Laravel
  54. New(ish*) Toys in Laravel *Since 4.2
  55. New Directory Structure
  56. Laravel 5 Directory App directory now "Your Application" / "Entry point to app” Laravel 4 Artisan Commands -> Console in App folder Web stuff in Http Controllers all have name space filters.php -> Broken out into separate classes/files. More focus on Service Providers -> Filter Service Providers No more global.php -> Use service providers Removed models directory. Can be just in app folder. PSR-4 default Don't like the app namespace? artisan app:name MyApplication
  57. Blade Changes Laravel 4 uses {{ to echo and {{{ To echo escaped Laravel 5 {{ and {{{ will echo escaped and {!! is used to echo raw Biggest impact is likely form helpers: {!! Form::open() !!}
  58. Commands Commands (app/Commands) - Message containing only info needed to do something Command Handler (app/Handlers/Commands) - Class that does something in response to a command Command Bus - Allows dispatch of commands, matches commands to handlers Self handling commands just need a handle() method on the command & implements SelfHandling
  59. Events Events (app/Events) Events have handlers (similar to Commands) Bind Events via appProvidersEventServiceProvider.php Events inform the system something happened VS demanding action from the system
  60. Form Requests Special class for validating and authorizing form submissions Each class has rules() (returns array) and authorize() (returns boolean) methods Benefit of rules & authorize being methods is you can perform logic Type Hinting your forms to the Form Request will automatically validate your forms If validation fails, errors will be available to the view and redirected back. This happens because the FormRequestServiceProvider listens for anything being resolved is an instance of FormRequest and calls the validate method.
  61. Helpers view() - Get a View instance for the given view path action() - Generate a URL for a given controller action app_path() - Get the fully qualified path to the app directory asset() - Generate a URL for an asset. Routing – get(), delete(), put()
  62. Route Caching artisan route:cache Serializes your routes.php Benefits: Faster routing Drawback: Must run artisan route:clear on every routes.php change
  63. Middleware Implements decorator pattern. request -> does work -> returns object to next layer Laravel uses middleware for Encrypting/Decrypting cookies, Reading/Writing Sessions artisan make:middleware MyMiddleware (app/Http/Middleware) Middleware registered in app/Http/Kernel.php Can run before or after the request has been processed. Easiest example would be auth
  64. Controller Method Injection Can inject dependencies into methods, no longer via constructor Purpose is to help developers write cleaner code
  65. Changes to Illuminate Packages Form or HTML helpers no longer in Core, must be pulled in via composer. add "laravelcollective/html": "~5.0" to composer update config/app.php
  66. Elixir API for defining basic Gulp tasks for your app. Requires nodejs Put your sass/less files in resources/assets/sass|less Can trigger sass/less/phpunit/phpspec, combine stylesheets
  67. Socialite Easy to use social logins with oauth Supports Facebook, Twitter, Google, Github, and Bitbucket
  68. Contracts Set of interfaces that define the core services provided by the framework Depend on abstractions, not concrete dependencies. Write code that doesn't have to be aware of the laravel framework
  69. Implicit Route Model Binding Laravel will automatically resolve type-hinted Eloquent model's defined in routes or controller actions whose variable names match a route segment name. Laravel 5.2https://laravel.com/docs/5.2/routing#route-model-binding
  70. API Rate Limiting Limit the amount of times a user can access your API with the Throttle middleware. Laravel 5.2https://laracasts.com/series/whats-new-in-laravel-5-2/episodes/2 Will return HTTP Code 429 (Too many requests)
  71. Auth & Password Resets New artisan command make:auth generates scaffolding for you. Laravel 5.2https://laracasts.com/series/whats-new-in-laravel-5-2/episodes/3
  72. Validating Arrays Laravel 5.2https://laracasts.com/series/whats-new-in-laravel-5-2/episodes/4
  73. Authentication Drivers Laravel 5.2 Easily have different authentication drivers for multiple authenticatable models or user tables. Useful to allow users from an admins table be able to log in as well as users from a users table.
  74. Functional Testing Is Easy!
  75. Upgrade from 4.2 to 5.x Fresh install Laravel 5 Update Dependencies /Packages Namespace (somewhat optional for now) Migrate environment variables Move routes to app/Http/routes.php Move controllers to app/Http/Controllers (add this to classmap) Copy route bindings to boot() in app/Providers/RouteServiceProvider.php Add route facade to RouteServiceProvider.php to continue using Route facade CSRF is now global. Use middleware to disable if needed Move models to app/Models. Add app/Models to classmap in composer.json Update your user auth to use Laravel 5’s auth system Move commands to app/Console/Commands. Add app/Console/Commands to classmap in composer.json Move migrations to database/migrations, Database Seeds to database/seeds … and more!
  76. Upgrade from 4.2 to 5.x https://laravel.com/docs/5.1/upgradeFresh install Laravel 5 Update Dependencies /Packages Namespace (somewhat optional for now) Migrate environment variables Move routes to app/Http/routes.php Move controllers to app/Http/Controllers (add this to classmap) Copy route bindings to boot() in app/Providers/RouteServiceProvider.php Add route facade to RouteServiceProvider.php to continue using Route facade CSRF is now global. Use middleware to disable if needed Move models to app/Models. Add app/Models to classmap in composer.json Update your user auth to use Laravel 5’s auth system Move commands to app/Console/Commands. Add app/Console/Commands to classmap in composer.json Move migrations to database/migrations, Database Seeds to database/seeds … and more!
  77. Quick note on versions 5.1 LTS bug fixes for 2 years, security fixes for 3 years Non LTS: bug fixes for 6 months, security fixes for 1 year 5.1 is currently the only LTS version
  78. Which version should you use? 5.2 for my own projects 5.1 for client projects
  79. Homestead “Laravel Homestead is an official, pre-packaged Vagrant "box" that provides you a wonderful development environment without requiring you to install PHP, HHVM, a web server, and any other server software on your local machine. No more worrying about messing up your operating system! Vagrant boxes are completely disposable. If something goes wrong, you can destroy and re- create the box in minutes!”
  80. What’s in the box: • Ubuntu 14.04 • PHP 7.0 • HHVM • Nginx • MySQL • Postgres • Redis • NodeJS • Bower • Grunt • Gulp • Beanstalkd • Memcached • Laravel Envoy Fabric + HipChat Extension + more!
  81. Getting Homestead Install the box: vagrant box add laravel/homestead
  82. Getting Homestead If you have PHP installed locally: composer global require "laravel/homestead=~2.0" Make sure to place the ~/.composer/vendor/bin directory in your PATH so the homestead executable is found when you run the homestead command in your terminal.
  83. Homestead 2.x & 3.x Significant change over previous 1.x versions Uses homestead from your home folder Less vagrant stuff in your projects (if you don’t like that sort of thing) 3.x will give you PHP 7
  84. How I use Homestead
  85. Install Homestead http://laravel.com/docs/5.1/homestead#per-project-installation
  86. Go forth and develop!
  87. Feedback! https://joind.in/talk/f8132 Joe Ferguson Twitter: @JoePFerguson Email: joe@joeferguson.me Freenode: joepferguson Contact Info:
Advertisement