Laravel 5.2 Changelog and What’s New?#

Implicit route binding#

Laravel implicitly (you don’t have to explicitly type this) finds the model for you

ie. User::findOrFail(3)

eg.

Route::get('api/users/{user}', function (App\User $user) {
    return $user;
});

Note

  • Only works when wildcard name { user } equals $user
  • Must match primary key otherwise you need a custom binding So you need to add a route binding in boot method of app/providers/routes.php

API Rate Limiting#

Route::get('/api/search/{term}', function($term) {
  return [
    'results' => $term
  ];
})->middleWare('throttle:3');

In throttle:x,y, x is the maxAttempts and y is the decayMinutes

Returns a 429 Error response: Too many attempts

Auth and Resets in Minutes#

New artisan command php artisan make:auth

It is better to do this after initial project creation

views/auth has all the basic views

Creates typical layout: login, registration, password reset

Laravel hides all the routes in Route::auth() in app/Http/routes.php, hidden in Illuminate.Routing.auth.php

Remember you can always use php artisan route:list to check your routes

Auth throttling also comes out of the box

Validating arrays#

Validating a number of email addresses or a number of cellphone numbers

Use inputs with the same name. eg. name=email[]

  $validator = Validator::make($request->all(), [
    'email.*' => 'required|email'
  ]);

Note : It gets a lot mroe involved when adding error messages and returning the old values etc.

Token based authentication#

In config.auth.php there are some guards, web which is the standard session based authentication and now a new api which is token based

You can create your custom guard here as well

Stateless so the token is saved in the db, a temporary user is created

Create route group:

You will need to add a api_token column to user table migrations:

  $table->string('api_token', 60)->unique();

then refresh

php artisan migrate:refresh

Now the user has an api token associated with the account and give that to a third party account. They can’t sign in with password, but can query.

Route::group(['prefix' => 'api/v1', 'middleware' => 'auth:api'], function(){
  Route::get('users/{user}', function (App\User $user) {
      return $user;
    });

  Route::get('/', function(){
      // return Auth::user(); //won't work as it still uses the web guard
      return Auth::guard('api')->user();
    })
})

Note:

  • The auth:api which uses the token guard
  • To test as an api must simulate an ajax request with httpie --json
  • To test with the api_token included in the request:

    http localhost:8888/api/v1/users/1 api_token=3245jfbsldifuya8yf --json

  • Change the default guard in app/config/auth.php

Source#