Updating Laravel from v5.1 to v5.5


So the new long-term support version of Laravel has been released taking us from the last long-term support version v5.1 to v5.5 with all the improvements that brings, however while there is plenty of guides around for upgrading from v5.4 to v5.5 there are none for upgrading from v5.1 straight to v5.5 unless you painstakingly upgrade to every version in between.

But don’t worry I have already been doing the upgrades to our current projects in house and have put together a guide that will allow you to upgrade a Laravel project from v5.1 to v5.5.

As a disclaimer however this guide is only for simple Laravel projects and may not work with projects that contain more complex aspects of Laravel such as “queues” and “events”.

So lets get started.

1) In your composer.json set the Laravel version to laravel/framework": "5.5.* add symfony/dom-crawler: "3.1.* and symfony/css-selector": "3.1.*
and finally update the phpunit version to ~6.0.

2) Next we need to completly replace our config/auth.php file with the one found here.

Once you have replaced the file with a fresh copy, set your authentication configuration options to their desired value based on your old configuration file. If you were using the typical, Eloquent based authentication services available in Laravel 5.1, most values should remain the same.

You should also take special note of the passwords.users.email configuration option in the new auth.php configuration file and verify that the view path matches the actual view path for your application, as the default path to this view was changed in Laravel 5.2. If the default value in the new configuration file does not match your existing view, update the configuration option.

3) In your App\Exceptions\Handler class file add the following use statements at the top

use Illuminate\Validation\ValidationException;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\HttpException;

and add them to the $dontReport array

protected $dontReport = [
    AuthorizationException::class,
    HttpException::class, 
    ModelNotFoundException::class,
    ValidationException::class,
];

4) In your config/app.php file remove both

Illuminate\Foundation\Providers\ArtisanServiceProvider
Illuminate\Routing\ControllerServiceProvider

from the providers array.

5) In the app/Providers/EventServiceProvider.php file remove the arguments provided for the boot method as well as the arguments provided for the parent::boot so it looks like the following.

  public function boot()
    {
        parent::boot();
    }

6) In the user class located at app/User.php add the use statement for the notifiable trait.

use Illuminate\Notifications\Notifiable;

7) Completely replace the the file app/Exceptions/Handler.php with the file found here.

8) In the app/http/Kernel.php file add the can and bindings middleware to the routeMiddleware array

        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

9) Back in the config/app.php add the notificationsServiceProvider to the providers array

Illuminate\Notifications\NotificationServiceProvider

and add the Notifications facade to the aliases array`.

Illuminate\Support\Facades\Notification

10) In the app/http/Kernel.php file, add the middlewareGroups array provided below.

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
            \App\Http\Middleware\VerifyCsrfToken::class,
    ],
    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

11) If you don’t already have one create a routes folder on the root of your project and inside there create the files web.php and app.php.

12) Take the contents of your old routes.php folder and put it into the new web.php file, any old routes that are used for communication to APIs should be placed into the api.php file, if there are no API routes simply open PHP tags at the top of the api.php file <?php.

13) Replace the contents of the app/Providers/RouteServiceProvider.php file with the file found here.

And that’s it simply run a composer update and the artisan commands php artisan view:clear and ‘php artisan view:clear’ and everything should be upgraded to v5.5.