Upload
joe-ferguson
View
565
Download
3
Embed Size (px)
Citation preview
Adventures in Laravel 5
https://joind.in/talk/d0f4a
Joe Ferguson
https://github.com/svpernova09/quickstart-basic
Want to follow along?
Who Am I?
Joe Ferguson
PHP Developer
Twitter: @JoePFerguson
Organizer of @MemphisPHP
@NomadPHP Lightning Talks
PHP FIG Secretary
Passionate about Community
Getting Started with Laravel
https://github.com/svpernova09/quickstart-basic
Want to follow along?
Database, Migrations, Seeding
database/
factories/ - Default Model Attributes
migrations/ - Version control for your DB Schema
seeds/ - Sample / Test Data for your DB
Database, Migrations, Seeding
Routing
app/
Http/
routes.php
Layouts
resources/
views/
layouts/
app.blade.php
Views
resources/
views/
tasks.blade.php
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`
`vagrant up`
Run the migration: `php artisan migrate`
Viewing the Migration
Laravel-5.2-basic-quickstart/database/
migrations/2015_10_27_141258_create_tasks_table.php
Viewing the ModelLaravel-5.2-basic-quickstart/app/Task.php
Viewing the RoutesLaravel-5.2-basic-quickstart/app/Http/routes.php
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
Exercise 1 Task Migration
Exercise 1 Task Model
Exercise 1 Task Create Route
Exercise 1 Task Delete Route
Exercise 1 Task View
Exercise 1 Task Create View
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
Exercise 2 Task Migration
Exercise 2 Model Relationships
Task Model
User Model
Exercise 2 Show Assigned User
Exercise 2 Count User’s Tasks
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 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
Exercise 3 ModelFactory
Exercise 3Make sure the task is saved to the DB
Exercise 3Make sure the user is saved to the DB
Exercise 3Ensure the user delete request succeeds
Exercise 3Ensure the task delete request succeeds
Exercise 3Ensure the index page loads
Exercise 3Ensure the index page contains data
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 Controller method
Move Create/Delete Task Functionality to Controller method
Exercise 4Move “Create” Forms to own views
Exercise 4Move “Current” html to own views
Exercise 4Move Create/Delete User Functionality to Controller method
Exercise 4Move Create/Delete Task Functionality to Controller method
Using Laravel Facades
Using Static Methods:
`User::all()`
`User::find(1);
`User::where(‘user_id`, 1)->get()
`User::where(‘email’, ‘[email protected]’)->get();
Using Dependency Injection
Using Injected Object
`$this->user->all()`
`$this->user->find(1);
`$this->user->where(‘user_id`, 1)->get()
`$this->user->where(‘email’, ‘[email protected]’)->get();
Exercise 5
Update your controllers to inject your models instead of using static methods (Facades)
Exercise 5Using Static
Dependency Injection
Exercise 6
Implement index view for tasks
Implement index view for users
Implement edit functionality for tasks
Add tests for your new routes & methods
Exercise 6Implement index view for users
Route Controller
Exercise 6Implement index view for tasks
Route Controller
Exercise 6Implement edit functionality for tasks
Route Controller
Exercise 6Handle Edit Form
Route Controller
What’s “TaskStoreRequest”?
Laravel Form Request
Whirlwind tour on Laravel
New(ish*) Toys in Laravel
*Since 4.2
New Directory Structure
Laravel 5 DirectoryApp 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
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() !!}
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
Events
Events (app/Events)
Events have handlers (similar to Commands)
Bind Events via app\Providers\EventServiceProvider.php
Events inform the system something happened VS demanding action from the system
Form RequestsSpecial 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.
Helpersview() - 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()
Route Caching
artisan route:cache
Serializes your routes.php
Benefits: Faster routing
Drawback: Must run artisan route:clear on every routes.php change
MiddlewareImplements 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
Controller Method Injection
Can inject dependencies into methods, no longer via constructor
Purpose is to help developers write cleaner code
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
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
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 dependencies.
Write code that doesn't have to be aware of the laravel framework
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
API Rate LimitingLimit 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)
Auth & Password ResetsNew artisan command make:auth generates scaffolding for you.
Laravel 5.2https://laracasts.com/series/whats-new-in-laravel-5-2/episodes/3
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 user tables.
Useful to allow users from an admins table be able to log in as well as users from a users table.
Functional Testing Is Easy!
Upgrade from 4.2 to 5.xFresh 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!
Upgrade from 4.2 to 5.x
https://la
ravel.com
/docs/5.1
/upgrade
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!
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
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 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!”
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!
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 the ~/.composer/vendor/bin directory in your PATH so the homestead executable is found when you run the
homestead command in your terminal.
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
How I use Homestead
Install Homestead
http://laravel.com/docs/5.1/homestead#per-project-installation
Go forth and develop!
Feedback!
https://joind.in/talk/f8132
Joe FergusonTwitter: @JoePFergusonEmail: [email protected]: joepferguson
Contact Info: