以下所指 L4 为 laravel 4.2,L5 为 laravel 5.0
建议如下情况进行升级
以下内容部分来自官方文档。由于我建议全部添加命名空间,内容和文档有出入,并有些内容文档未提及
新建一个 L5 项目,新建方法参考这里,然后拷贝 L4 的文件到新建的项目下面。
拷贝的文件包括:controller, routes, models, Artisan commands, assets, 还有一些你自己添加的类或者资源。
拷贝你添加的所有的 composer 依赖和包到 L5 的 composer.json
中,也包括你引用的其他的代码和 SDK。
不过需要注意一点就是,你依次去那些针对 Laravel 开发的包需要到项目主页看看作者是否支持 L5 或者说准备支持 L5,据我所知,目前主流的包基本已支持,因为改动不是特别大。选好支持 L5 的版本之后, composer update
就好了。
L4 的命名空间是全局的。虽然官方说能不加命名空间就能迁移,但是还是手动给加上吧!不然以后更麻烦了。提醒一下,有这个方法可以修改命名空间的前缀: php artisan app:name Yourproj
。
如果你的程序中使用了变量作为动态类名,一定要注意在变量中添加完整的命名空间:
# L4中可能存在的写法
$myClassName = 'Dog';
$obj = new $myClassName(); // 在L5中将要报错
# L5中要修改为
$myClassName = 'app\\Models\\Dog';
$obj = new $myClassName();
项目根目录命令行 cp .env.example .env
,拷贝你自定义的配置到这里,配置文件不再像之前那样有很多文件夹供你根据环境选择了,L5 下只有这一个,意思就是每个不同的环境都需要自己来稍微定制一些。不过每个项目下面可能都是不同的。写好配置文件后记得保存个模板到 .env.example
供其他队友使用。
在 config/ 下面开始使用 env('DB_HOST', 'localhost')
的方式来调用你的配置到对应的数组键下面。
拷贝原来的 routes.php
到 app/Http/routes.php
拷贝你的 contollers
到 app/Http/Controllers
下。添加正确的命名空间到每个类上 App\Http\Controllers
。记得让你的 BaseController
继承那个抽象类 Controller
。然后挨个查看文件,根据 PHPstorm 提示进行纠错,主要包括引用类和命名空间的错误。
新建文件夹到 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'); // L5需要添加完整命名空间
}
}
L5 中的中间件 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');
});
Builder _不再_支持 remember
这个方法了,请使用 Cache::remember
对程序改造 。如果使用了 redis
,还需要 composer require 'predis/predis'
。
按照下面的操作对 User model
进行升级。
删除下面的内容
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
然后添加以下代码:
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
删除 UserInterface
和 RemindableInterface
这两个接口,然后添加 AuthenticatableContract
和 CanResetPasswordContract
这两个接口。
添加以下两个 traits
到类里面
use Authenticatable, CanResetPassword;
如果你用到 Illuminate\Auth\Reminders\RemindableTrait
和 Illuminate\Auth\UserTrait
,那么就把他们删掉。
直接拷贝你的命令行程序的文件到 app/Console/Cammands
目录,并添加对应命名空间。
接着拷贝 start/artisan.php
内容到 app/Console/Kernel.php
文件的 command
数组中。例如
protected $commands = [
'Laracasts\Console\Commands\ClearHistoryCommand',
'Laracasts\Console\Commands\SignupsReportCommand',
'Laracasts\Console\Commands\WelcomeUserCommand',
];
删除 L5 database/migrations
中自带的两个数据迁移文件,然后把你自己原来的数据库迁移文件从 app/database/migrations
拷贝到 database/migrations
中来。 app/database/seeds
的文件拷贝到 database/seeds
中。
这个操作不需要添加命名空间,因为在 composer.json
中已经引入了该目录。
如果在 start/global.php
中有 ioc 绑定的话,那就吧他们移动到 app/Providers/AppServiceProvider.php
的 register
方法中。同时还需要引入 App facade
。
直接从 app/views
复制到 resources/views
中。
L4 中的 {{ }}
对应为 L5 的 {!! !!}
,而 L4 中的 {{{ }}}
对应 L5 的 {{ }}
。需要对应修改一下。
复制 app/lang
到 resources/lang
把你的公共资源都直接拷贝过去吧!
复制 app/tests
到 tests
目录。
如果你用了 Form
或者 HTML
帮助函数,那么就在 composer.json
中添加 "illuminate/html": "~5.0"
。
然后在 config/app.php
中添加 'providers'
:
'Illuminate\Html\HtmlServiceProvider',
接着在 'aliases'
中添加:
'Form' => 'Illuminate\Html\FormFacade',
'Html' => 'Illuminate\Html\HtmlFacade',
替换 $paginator->links()
为 $paginator->render()
。如果你这里使用了分页模板的话,L4 是在 links 中传入分页模板的路径字符串,而 L5 中 render 的参数为 Illuminate\Contracts\Pagination\Presenter 对象,需要根据需要建立一个继承该接口的类。
L5 对应的 Beanstalk
包为: "pda/pheanstalk": "~3.0"
,不再是 "pda/pheanstalk": "~2.1"
相信你按照上面的步骤执行后,你的程序依然报错。因为自己的项目都可能有一些比较 个性 的地方,所以需要多加细心和耐心来完成纠错。
如果你使用了 xdebug 的断点调试,可能会让你事半功倍。
遇到问题了欢迎来探讨!
最后祝你 level up !^^
本帖已被设为精华帖!
Original url: Access
Created at: 2019-04-18 11:45:44
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论