Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Adventures in Laravel 5
Joe Ferguson
February 4th 2015
Who Am I?
Joe Ferguson
PHP Developer
Twitter: @JoePFerguson
Organizer of @MemphisPHP
@NomadPHP Lightning Talks
Passionate ...
Before we begin
Have Virtualbox (virtualbox.org) Installed
Have VirtualBox Extension Pack Installed
Have Vagrant (vagrantu...
New(ish) Toys in Laravel
New Directory Structure
Laravel 5 Directory
App directory now "Your Application" / "Entry point to app”
Laravel 4 Artisan Commands -> Console in A...
Blade Changes
Laravel 4 uses {{ to echo and {{{ To echo escaped
Laravel 5 {{ and {{{ will echo escaped and {!! is used to ...
Commands
Commands (app/Commands) - Message containing only info needed
to do something
Command Handler (app/Handlers/Comma...
Events
Events (app/Events)
Events have handlers (similar to Commands)
Bind Events via appProvidersEventServiceProvider.php...
Form Requests
Special class for validating and authorizing form submissions
Each class has rules() (returns array) and aut...
Helpers
view() - Get a View instance for the given view path
action() - Generate a URL for a given controller action
app_p...
Route Caching
artisan route:cache
Serializes your routes.php
Benefits: Faster routing
Drawback: Must run artisan route:clea...
Middleware
Implements decorator pattern. request -> does work -> returns object to next
layer
Laravel uses middleware for ...
Controller Method Injection
Can inject dependencies into methods, no longer via constructor
Purpose is to help developers ...
Changes to Illuminate Packages
Form or HTML helpers no longer in Core, must be pulled in via
composer.
add "laravelcollect...
Elixir
API for defining basic Gulp tasks for your app.
Requires nodejs
Put your sass/less files in resources/assets/sass|les...
Socialite
Easy to use social logins with oauth
Supports Facebook, Twitter, Google, Github, and Bitbucket
Contracts
Set of interfaces that define the core services provided by the
framework
Depend on abstractions, not concrete de...
Implicit Route Model Binding
Laravel will automatically resolve type-hinted Eloquent model's
defined in routes or controlle...
API Rate Limiting
Limit the amount of times a user can access your API with the
Throttle middleware.
Laravel 5.2https://la...
Auth & Password Resets
New artisan command make:auth generates scaffolding for you.
Laravel 5.2https://laracasts.com/serie...
Validating Arrays
Laravel 5.2https://laracasts.com/series/whats-new-in-laravel-5-2/episodes/4
Authentication Drivers
Laravel 5.2
Easily have different authentication drivers for multiple
authenticatable models or use...
Functional Testing Is Easy!
Upgrade from 4.2 to 5.x
Fresh install Laravel 5
Update Dependencies /Packages
Namespace (somewhat optional for now)
Migrat...
Upgrade from 4.2 to 5.x
https://laravel.com/docs/5.1/upgradeFresh install Laravel 5
Update Dependencies /Packages
Namespac...
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 fix...
Which version should you use?
5.2 for my own projects
5.1 for client projects
Homestead
“Laravel Homestead is an official, pre-packaged
Vagrant "box" that provides you a wonderful
development environme...
What’s in the box:
• Ubuntu 14.04
• PHP 7.0
• HHVM
• Nginx
• MySQL
• Postgres
• Redis
• NodeJS
• Bower
• Grunt
• Gulp
• Be...
Getting Homestead
Install the box:
vagrant box add laravel/homestead
Getting Homestead
If you have PHP installed locally:
composer global require "laravel/homestead=~2.0"
Make sure to place t...
Homestead 2.x & 3.x
Significant change over previous 1.x versions
Uses homestead from your home folder
Less vagrant stuff i...
How I use Homestead
Install Homestead
http://laravel.com/docs/5.1/homestead#per-project-installation
Getting Started with Laravel
Database, Migrations, Seeding
database/
factories/ - Default Model Attributes
migrations/ - Version control for your DB Sc...
Database, Migrations, Seeding
Routing
app/
Http/
routes.php
Layouts
resources/
views/
layouts/
app.blade.php
Views
resources/
views/
tasks.blade.php
Time to do stuff!
Open
Laravel-5.2-basic-quickstart
Basic Quick Start
https://laravel.com/docs/5.2/quickstart
If you already have Vagrant, Run:
`./vendor/bin/homestead make`
...
Viewing the Migration
Laravel-5.2-basic-quickstart/
database/
migrations/
2015_10_27_141258_create_tasks_table.php
Viewing the Model
Laravel-5.2-basic-quickstart/app/Task.php
Viewing the Routes
Laravel-5.2-basic-quickstart/app/Http/routes.php
Exercise 1 Hints
Add / edit migration to create
users table
Add / edit User model
Add routes (just like task)
Add / edit U...
Exercise 1 Solution
To see a possible solution
checkout the branch “exercise-1”
git checkout exercise-1
Exercise 2
Assign users to tasks as you create
them
When listing tasks, show the user
they have assigned them
When listing...
Exercise 2 Hints
Add / edit migration to create
users table
Add / edit User model
Add routes (just like task)
Add / edit U...
Exercise 2 Solution
To see a possible solution
checkout the branch “exercise-2”
git checkout exercise-2
Exercise 3
Write Tests for User Functionality
Write Tests for Task Functionality
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 t...
Exercise 3 Solution
To see a possible solution
checkout the branch “exercise-3”
git checkout exercise-3
Easy Stuff Right?
Let’s clean up a bit
Exercise 4
Move “Create” Forms to own views
Move “Current” html to own views
Move Create/Delete User Functionality to
Cont...
Exercise 4 Hints
Use `php artisan make:controller` to
scaffold
Utilize your tests to make sure you
didn’t break anything:
...
Using Laravel Facades
Using Static Methods:
`User::all()`
`User::find(1);
`User::where(‘user_id`, 1)->get()
`User::where(‘e...
Using Dependency Injection
Using Injected Object
`$this->user->all()`
`$this->user->find(1);
`$this->user->where(‘user_id`,...
Exercise 5
Update your controllers to inject your
models instead of using static methods
(Facades)
Exercise 5 Hints
Make sure you “use AppModelName”
Utilize your tests to make sure you
didn’t break anything:
`./vendor/bin...
Exercise 6
Implement index view for tasks
Implement index view for users
Implement edit functionality for tasks
Add tests ...
Exercise 6 Hints
Route Controller
Go forth and develop!
Feedback!
https://joind.in/talk/f8132
Joe Ferguson
Twitter: @JoePFerguson
Email: joe@joeferguson.me
Freenode: joepferguson...
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
Upcoming SlideShare
Loading in …5
×

Adventures in Laravel 5 SunshinePHP 2016 Tutorial

5,288 views

Published on

Slides from my Laravel Tutorial at SunshinePHP 2016

Published in: Technology
  • D0WNL0AD FULL ▶ ▶ ▶ ▶ http://1lite.top/0JBJS ◀ ◀ ◀ ◀
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Nice Slides Mate, Check these tutorials if you like to build application from scratch using Laravel 5.1, You can even download and setup on your local machine, http://infidigisolutions.com/larb/index1.html
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Njce! Thanks for sharing.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Adventures in Laravel 5 SunshinePHP 2016 Tutorial

  1. 1. Adventures in Laravel 5 Joe Ferguson February 4th 2015
  2. 2. Who Am I? Joe Ferguson PHP Developer Twitter: @JoePFerguson Organizer of @MemphisPHP @NomadPHP Lightning Talks Passionate about Community
  3. 3. Before we begin Have Virtualbox (virtualbox.org) Installed Have VirtualBox Extension Pack Installed Have Vagrant (vagrantup.com) Installed run: vagrant box add laravel/homestead
  4. 4. New(ish) Toys in Laravel
  5. 5. New Directory Structure
  6. 6. 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
  7. 7. 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() !!}
  8. 8. 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
  9. 9. 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
  10. 10. 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.
  11. 11. 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()
  12. 12. Route Caching artisan route:cache Serializes your routes.php Benefits: Faster routing Drawback: Must run artisan route:clear on every routes.php change
  13. 13. 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
  14. 14. Controller Method Injection Can inject dependencies into methods, no longer via constructor Purpose is to help developers write cleaner code
  15. 15. 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
  16. 16. 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
  17. 17. Socialite Easy to use social logins with oauth Supports Facebook, Twitter, Google, Github, and Bitbucket
  18. 18. 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
  19. 19. 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
  20. 20. 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)
  21. 21. 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
  22. 22. Validating Arrays Laravel 5.2https://laracasts.com/series/whats-new-in-laravel-5-2/episodes/4
  23. 23. 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.
  24. 24. Functional Testing Is Easy!
  25. 25. 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!
  26. 26. 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!
  27. 27. 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
  28. 28. Which version should you use? 5.2 for my own projects 5.1 for client projects
  29. 29. 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!”
  30. 30. 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!
  31. 31. Getting Homestead Install the box: vagrant box add laravel/homestead
  32. 32. 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.
  33. 33. 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
  34. 34. How I use Homestead
  35. 35. Install Homestead http://laravel.com/docs/5.1/homestead#per-project-installation
  36. 36. Getting Started with Laravel
  37. 37. Database, Migrations, Seeding database/ factories/ - Default Model Attributes migrations/ - Version control for your DB Schema seeds/ - Sample / Test Data for your DB
  38. 38. Database, Migrations, Seeding
  39. 39. Routing app/ Http/ routes.php
  40. 40. Layouts resources/ views/ layouts/ app.blade.php
  41. 41. Views resources/ views/ tasks.blade.php
  42. 42. Time to do stuff!
  43. 43. Open Laravel-5.2-basic-quickstart
  44. 44. 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`
  45. 45. Viewing the Migration Laravel-5.2-basic-quickstart/ database/ migrations/ 2015_10_27_141258_create_tasks_table.php
  46. 46. Viewing the Model Laravel-5.2-basic-quickstart/app/Task.php
  47. 47. Viewing the Routes Laravel-5.2-basic-quickstart/app/Http/routes.php
  48. 48. Exercise 1 Hints Add / edit migration to create users table Add / edit User model Add routes (just like task) Add / edit User Views You can safely disregard any authentication related to users
  49. 49. Exercise 1 Solution To see a possible solution checkout the branch “exercise-1” git checkout exercise-1
  50. 50. Exercise 2 Assign users to tasks as you create them When listing tasks, show the user they have assigned them When listing users, show how many tasks they have assigned them You can safely disregard any authentication related to users
  51. 51. Exercise 2 Hints Add / edit migration to create users table Add / edit User model Add routes (just like task) Add / edit User Views You can safely disregard any authentication related to users
  52. 52. Exercise 2 Solution To see a possible solution checkout the branch “exercise-2” git checkout exercise-2
  53. 53. Exercise 3 Write Tests for User Functionality Write Tests for Task Functionality
  54. 54. 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
  55. 55. Exercise 3 Solution To see a possible solution checkout the branch “exercise-3” git checkout exercise-3
  56. 56. Easy Stuff Right?
  57. 57. Let’s clean up a bit
  58. 58. 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
  59. 59. Exercise 4 Hints Use `php artisan make:controller` to scaffold Utilize your tests to make sure you didn’t break anything: `./vendor/bin/phpunit` You can safely disregard any authentication related to users
  60. 60. Using Laravel Facades Using Static Methods: `User::all()` `User::find(1); `User::where(‘user_id`, 1)->get() `User::where(‘email’, ‘joe@joeferguson.me’)->get();
  61. 61. 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();
  62. 62. Exercise 5 Update your controllers to inject your models instead of using static methods (Facades)
  63. 63. Exercise 5 Hints Make sure you “use AppModelName” Utilize your tests to make sure you didn’t break anything: `./vendor/bin/phpunit` You can safely disregard any authentication related to users
  64. 64. Exercise 6 Implement index view for tasks Implement index view for users Implement edit functionality for tasks Add tests for your new routes & methods
  65. 65. Exercise 6 Hints Route Controller
  66. 66. Go forth and develop!
  67. 67. Feedback! https://joind.in/talk/f8132 Joe Ferguson Twitter: @JoePFerguson Email: joe@joeferguson.me Freenode: joepferguson Contact Info:

×