Laravel 5.1 marks a milestone as the framework's first Long-Term Support release. With two years of bug fixes and three years of security updates, enterprises can confidently adopt Laravel. At ZIRA Software, we're migrating production applications to 5.1 LTS.
LTS Support Timeline
Laravel 5.1 LTS Support
├── Release: June 2015
├── Bug Fixes: Until June 2017
├── Security Updates: Until June 2018
└── Recommended for: Production applications
requiring stability
Event Broadcasting
// Broadcasting events to WebSocket clients
class OrderShipped implements ShouldBroadcast
{
use SerializesModels;
public $order;
public function __construct(Order $order)
{
$this->order = $order;
}
public function broadcastOn()
{
return ['orders.' . $this->order->user_id];
}
public function broadcastAs()
{
return 'order.shipped';
}
}
// Trigger broadcast
event(new OrderShipped($order));
// JavaScript client
var pusher = new Pusher('your-key');
var channel = pusher.subscribe('orders.' + userId);
channel.bind('order.shipped', function(data) {
alert('Order ' + data.order.id + ' has shipped!');
});
Middleware Parameters
// Define middleware with parameters
class RoleMiddleware
{
public function handle($request, Closure $next, $role)
{
if (!$request->user()->hasRole($role)) {
abort(403);
}
return $next($request);
}
}
// Register in Kernel.php
protected $routeMiddleware = [
'role' => \App\Http\Middleware\RoleMiddleware::class,
];
// Use with parameters
Route::get('/admin', function () {
// ...
})->middleware('role:admin');
Route::get('/editor', function () {
// ...
})->middleware('role:editor');
// Multiple parameters
public function handle($request, Closure $next, $role, $permission)
{
// Check both role and permission
}
Route::get('/posts', 'PostController@index')
->middleware('role:editor,posts.view');
Authorization with Gates and Policies
// Define gates in AuthServiceProvider
public function boot()
{
$this->registerPolicies();
Gate::define('update-post', function ($user, $post) {
return $user->id === $post->user_id;
});
Gate::define('delete-post', function ($user, $post) {
return $user->id === $post->user_id || $user->isAdmin();
});
}
// Using gates
if (Gate::allows('update-post', $post)) {
// User can update
}
if (Gate::denies('delete-post', $post)) {
abort(403);
}
// Policy classes
class PostPolicy
{
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
public function delete(User $user, Post $post)
{
return $user->id === $post->user_id || $user->isAdmin();
}
}
// Controller authorization
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// Update the post...
}
Directory Structure Changes
Laravel 5.1 Structure
├── app/
│ ├── Console/
│ ├── Events/
│ ├── Exceptions/
│ ├── Http/
│ │ ├── Controllers/
│ │ ├── Middleware/
│ │ └── Requests/
│ ├── Jobs/
│ ├── Listeners/
│ ├── Policies/
│ └── Providers/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── storage/
└── tests/
Improved Artisan Commands
# Generate events and listeners
php artisan event:generate
# Create policy
php artisan make:policy PostPolicy
# Create form request
php artisan make:request StorePostRequest
# Create job
php artisan make:job ProcessPodcast
# Model factory
php artisan make:model Post --migration --factory
Model Factories
// database/factories/ModelFactory.php
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt('password'),
'remember_token' => str_random(10),
];
});
$factory->define(App\Post::class, function (Faker\Generator $faker) {
return [
'title' => $faker->sentence,
'content' => $faker->paragraphs(3, true),
'user_id' => factory(App\User::class)->create()->id,
];
});
// Usage in tests
$user = factory(App\User::class)->create();
$posts = factory(App\Post::class, 10)->create(['user_id' => $user->id]);
Conclusion
Laravel 5.1 LTS provides the stability enterprises need with modern features. Event broadcasting, authorization, and middleware parameters make building complex applications straightforward.
Upgrading to Laravel 5.1 LTS? Contact ZIRA Software for migration assistance.