- Upgrading To 5.1.0
- Upgrading To 5.0.16
- Upgrading To 5.0 From 4.2
- Upgrading To 4.2 From 4.1
- Upgrading To 4.1.29 From <= 4.1.x
- Upgrading To 4.1.26 From <= 4.1.25
- Upgrading To 4.1 From 4.0
Update the $compiledPath
variable in bootstrap/autoload.php
to the following:
$compiledPath = __DIR__.'/cache/compiled.php';
Within your bootstrap
directory, create a cache
directory (bootstrap/cache
). Place a .gitignore
file in this directory with the following contents:
*
!.gitignore
This directory should be writable, and will be used by the framework to store temporary optimization files like compiled.php
, routes.php
, config.php
, and services.json
.
In your bootstrap/autoload.php
file, update the $compiledPath
variable to:
$compiledPath = __DIR__.'/../vendor/compiled.php';
The recommended method of upgrading is to create a new Laravel 5.0
install and then to copy your 4.2
site's unique application files into the new application. This would include controllers, routes, Eloquent models, Artisan commands, assets, and other code specific to your application.
To start, install a new Laravel 5 application into a fresh directory in your local environment. We'll discuss each piece of the migration process in further detail below.
Don't forget to copy any additional Composer dependencies into your 5.0 application. This includes third-party code such as SDKs.
Some Laravel-specific packages may not be compatible with Laravel 5 on initial release. Check with your package's maintainer to determine the proper version of the package for Laravel 5. Once you have added any additional Composer dependencies your application needs, run composer update
.
By default, Laravel 4 applications did not utilize namespacing within your application code. So, for example, all Eloquent models and controllers simply lived in the "global" namespace. For a quicker migration, you can simply leave these classes in the global namespace in Laravel 5 as well.
Copy the new .env.example
file to .env
, which is the 5.0
equivalent of the old .env.php
file. Set any appropriate values there, like your APP_ENV
and APP_KEY
(your encryption key), your database credentials, and your cache and session drivers.
Additionally, copy any custom values you had in your old .env.php
file and place them in both .env
(the real value for your local environment) and .env.example
(a sample instructional value for other team members).
For more information on environment configuration, view the full documentation.
Note: You will need to place the appropriate
.env
file and values on your production server before deploying your Laravel 5 application.
Laravel 5.0 no longer uses app/config/{environmentName}/
directories to provide specific configuration files for a given environment. Instead, move any configuration values that vary by environment into .env
, and then access them in your configuration files using env('key', 'default value')
. You will see examples of this in the config/database.php
configuration file.
Set the config files in the config/
directory to represent either the values that are consistent across all of your environments, or set them to use env()
to load values that vary by environment.
Remember, if you add more keys to .env
file, add sample values to the .env.example
file as well. This will help your other team members create their own .env
files.
Copy and paste your old routes.php
file into your new app/Http/routes.php
.
Next, move all of your controllers into the app/Http/Controllers
directory. Since we are not going to migrate to full namespacing in this guide, add the app/Http/Controllers
directory to the classmap
directive of your composer.json
file. Next, you can remove the namespace from the abstract app/Http/Controllers/Controller.php
base class. Verify that your migrated controllers are extending this base class.
In your app/Providers/RouteServiceProvider.php
file, set the namespace
property to null
.
Copy your filter bindings from app/filters.php
and place them into the boot()
method of app/Providers/RouteServiceProvider.php
. Add use Illuminate\Support\Facades\Route;
in the app/Providers/RouteServiceProvider.php
in order to continue using the Route
Facade.
You do not need to move over any of the default Laravel 4.0 filters such as auth
and csrf
; they're all here, but as middleware. Edit any routes or controllers that reference the old default filters (e.g. ['before' => 'auth']
) and change them to reference the new middleware (e.g. ['middleware' => 'auth'].
)
Filters are not removed in Laravel 5. You can still bind and use your own custom filters using before
and after
.
By default, CSRF protection is enabled on all routes. If you'd like to disable this, or only manually enable it on certain routes, remove this line from App\Http\Kernel
's middleware
array:
'App\Http\Middleware\VerifyCsrfToken',
If you want to use it elsewhere, add this line to $routeMiddleware
:
'csrf' => 'App\Http\Middleware\VerifyCsrfToken',
Now you can add the middleware to individual routes / controllers using ['middleware' => 'csrf']
on the route. For more information on middleware, consult the full documentation.
Feel free to create a new app/Models
directory to house your Eloquent models. Again, add this directory to the classmap
directive of your composer.json
file.
Update any models using SoftDeletingTrait
to use Illuminate\Database\Eloquent\SoftDeletes
.
Eloquent no longer provides the remember
method for caching queries. You now are responsible for caching your queries manually using the Cache::remember
function. For more information on caching, consult the full documentation.
To upgrade your User
model for Laravel 5's authentication system, follow these instructions:
Delete the following from your use
block:
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
Add the following to your use
block:
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
Remove the UserInterface and RemindableInterface interfaces.
Mark the class as implementing the following interfaces:
implements AuthenticatableContract, CanResetPasswordContract
Include the following traits within the class declaration:
use Authenticata