Laravel 4.2 升级 Laravel 5 全面攻略

建议如下情况进行升级

对Laravel 4.2比较了解,同时对Laravel 5.0有基本的认识

想对比Laravel 4.2和Laravel 5.0的差异,快速学习L5

程序的代码写的不乱,按照Laravel的基本的默认规则来写

有足够的耐心和精力

熟练使用phpstorm,因为这是个规模较大的工程,有个具有代码逻辑分析功能的编辑器,会让你减少不必要的错误,特别是命名空间和引用。如果你还不怎么会用phpstorm,那么先看Be Awesome in PHPStorm

使用larvel-ide-helper这个插件,不然phpstorm就没有那么智能。(注意生成的_ide_helper.php的版本为Laravel 5.0的)

以下内容部分来自官方文档。由于我建议全部添加命名空间,内容和文档有出入,并有些内容文档未提及

新建Laravel 5.0项目,然后再迁移

新建一个Laravel 5.0项目,新建方法参考这里,然后拷贝Laravel 4.2的文件到新建的项目下面。

拷贝的文件包括:controller, routes, models, Artisan commands, assets, 还有一些你自己添加的类或者资源。

Composer 你的依赖和包

拷贝你添加的所有的composer依赖和包到Laravel 5.0的 composer.json 中,也包括你引用的其他的代码和SDK。
不过需要注意一点就是,你依次去那些针对Laravel开发的包需要到项目主页看看作者是否支持Laravel 5.0或者说准备支持L5,据我所知,目前主流的包基本已支持,因为改动不是特别大。选好支持Laravel 5.0的版本之后, composer update 就好了。

命名空间 Namespace

Laravel 4.2的命名空间是全局的。虽然官方说能不加命名空间就能迁移,但是还是手动给加上吧!不然以后更麻烦了。提醒一下,有这个方法可以修改命名空间的前缀: php artisan app:name Yourproj。

如果你的程序中使用了变量作为动态类名,一定要注意在变量中添加完整的命名空间:

# Laravel 4.2中可能存在的写法 $myClassName = 'Dog'; $obj = new $myClassName(); // 在Laravel 5.0中将要报错 # L5中要修改为 $myClassName = 'app\\Models\\Dog'; $obj = new $myClassName();

配置文件 Configuration

项目根目录命令行 cp .env.example .env ,拷贝你自定义的配置到这里,配置文件不再像之前那样有很多文件夹供你根据环境选择了,Laravel 5.0下只有这一个,意思就是每个不同的环境都需要自己来稍微定制一些。不过每个项目下面可能都是不同的。写好配置文件后记得保存个模板到 .env.example 供其他队友使用。

在 config/ 下面开始使用 env('DB_HOST', 'localhost') 的方式来调用你的配置到对应的数组键下面。

路由 routes

拷贝原来的 routes.php 到 app/Http/routes.php

控制器 controllers

拷贝你的 contollers 到 app/Http/Controllers 下。添加正确的命名空间到每个类上 App\Http\Controllers 。记得让你的 BaseController 继承那个抽象类 Controller 。然后挨个查看文件,根据PHPstorm提示进行纠错,主要包括引用类和命名空间的错误。

模型 models

新建文件夹到 app/Models,把原来的 models 全部拷贝过来。首先,添加命名空间 App\Models 。接着是关联到其他model的一些方法,比如 belongTo, hasMany等,第一个参数需要填写完整的命名空间,例如

class User extends Eloquent { public function phone() { // return $this->hasOne('Phone'); 原来这样写的 return $this->hasOne('App\Models\Phone'); // Laravel 5.0需要添加完整命名空间 } }

过滤器 Filters

Laravel 5.0中的中间件 Middleware 是个重头戏,路由 routes.php 中的 ['before' => 'auth']需要替换为 ['middleware' => 'auth'] 。

同时还要改一下过滤器Filters:

// app/filters.php Router::filter('shall-not-pass', function() { return Redirect::to('shadow'); });

改成这样子

// app/Providers/RouteServiceProvider@boot() $router->filter('shall-not-pass', function() { return \Redirect::to('shadow'); });

缓存 Cache

Builder 不再支持 remember 这个方法了,请使用 Cache::remember 对程序改造 。如果使用了 redis,还需要 composer require 'predis/predis' 。

用户认证 Authentication

按照下面的操作对 User model 进行升级。

删除下面的内容

use Illuminate\Auth\UserInterface; use Illuminate\Auth\Reminders\RemindableInterface;

然后添加以下代码:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/4595865ddf72ffedf58a1c9a61ea9895.html