## 全新安装,然后迁移
推荐的升级方式是建立一个全新的 Laravel 5.0 项目,然后复制您在 4.2 的文件到此新的应用程序,这将包含控制器、路由、Eloquent 模型、Artisan 命令(Asset)、资源和关于此应用程序的其他特定文件。
最开始,安装新的 Laravel 5 应用程序到新的本地目录下,我们将详细探讨迁移各部分的过程。
## Composer 依赖与组件
别忘了将任何附加于 Composer 的依赖组件加入 5.0 应用程序内,包含第三方代码(例如 SDKs)。
部分组件也许不兼容刚发布的 Laravel 5 版本,请向组件管理者确认该组件支持 Laravel 5 的版本,当您在 Composer 内加入任何组件,请执行 `composer update`。
## 命名空间
默认情况下,Laravel 4 没有在应用程序的源码中使用命名空间,所以,举例来说,所有的 Eloquent 模型和控制器仅存在「全局」的命名空间下,为了更快速的迁移,Laravel 5 也允许您可以将这些类别一样保留在「全局」的命名空间。
## 设置文件
#### 迁移环境变量
复制新的 `.env.example` 文件到 `.env`,在 5.0 这相当于原本的 `.env.php`。像是您的 `APP_ENV` 和 `APP_KEY` (您的加密钥匙)、数据库认证和您的缓存驱动与 `session` 驱动。
此外,复制原先自定义的 `.env.php` 文件,并修改为 `.env` (本机环境的真实设置值) 和 `.env.example` (给其他团队成员的示例)。
更多关于环境设置值,请见完整文档。
> 注意: 在部署 Laravel 5 应用程序之前,您需要在正式主机上放置 .env 文件并设置适当的值。
#### 设置文件
Laravel 5.0 不再使用 `app/config/{environmentName}/` 目录结构来提供对应该环境的设置文件,取而代之的是,将环境对应的设置值复制到 `.env`,然后在设置文件使用 `env('key', 'default value')` 来访问,您可以在 `config/database.php` 文件内看到相关范例。
将设置文件放在 `config/` 目录下,来表示所有环境共用的设置文件,或是在文件内使用 `env()` 来取得对应该环境的设置值。
请记住,若您在 `.env` 文件内增加 `key` 值,同时也要对应增加到 `.env.example` 文件中,这将可以帮助团队成员修改他们的 `.env` 文件。
## 路由
复制原本的 `routes.php` 文件到 `app/Http/routes.php`。
## 控制器
下一步,请将所有的控制器复制到 `app/Http/Controllers` 目录,既然在本指南中我们不打算迁移到完整的命名空间,请将 `app/Http/Controllers` 添加到 `composer.json` 的 `classmap`,接下来,您可以从 `app/Http/Controllers/Controller.php` 基础抽象类中移除命名空间,并确认迁移过来的控制器要继承这个基础类。
在 `app/Providers/RouteServiceProvider.php` 文件中,将 `namespace` 属性设置为 `null`。
## 路由过滤器
将过滤器绑定从原来的 `app/filters.php` 复制到 `app/Providers/RouteServiceProvider.php` 的 `boot()` 方法中,并在 `app/Providers/RouteServiceProvider.php` 加入 `use Illuminate\Support\Facades\Route;` 来继续使用 `Route Facade`。
您不需要移动任何 Laravel 4.0 默认的过滤器,像是 `auth` 和 `csrf` 。他们已经内置,只是换作以中间件形式出现。那些在路由或控制器内有参照到旧有的过滤器 (例如 ['before' => 'auth']) 请修改参照到新的中间件 (例如 ['middleware' => 'auth'].)
Laravel 5 并没有将过滤器移除,您一样可以使用 `before` 和 `after` 绑定和使用您自定义的过滤器。
## 全局 CSRF
默认情况下,所有路由都会使用CSRF 保护。若想关闭他们,或是在指定在特定路由开启,请移除 `App\Http\Kernel` 中 `middleware` 数组内的这一行:
~~~
'App\Http\Middleware\VerifyCsrfToken',
~~~
如果您想在其他地方使用它,加入这一行到 $routeMiddleware:
~~~
'csrf' => 'App\Http\Middleware\VerifyCsrfToken',
~~~
现在,您可于路由内使用 ['middleware' => 'csrf'] 即可个别添加中间件到路由/控制器。了解更多关于中间件,请见完整文档。
## Eloquent 模型
你可以建立新的 `app/Models` 目录来放置所有 Eloquent 模型。并且同样的,在 `composer.json` 将此目录添加到 `classmap` 内。
在模型内加入 `SoftDeletingTrait` 来使用 `Illuminate\Database\Eloquent\SoftDeletes`.
#### Eloquent 缓存
Eloquent 不再提供 `remember` 方法来缓存查询。现在你需要手动使用 `Cache::remember` 方法快速缓存。了解更多关于缓存,请见完整文档。
## 会员认证模型
要使用 Laravel 5 的会员认证系统,请遵循以下指引来升级您的 User 模型:
从 use 区块删除以下内容:
~~~
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
~~~
添加以下内容到 use 区块:
~~~
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 接口。
实现以下接口:
~~~
implements AuthenticatableContract, CanResetPasswordContract
~~~
在类中声明引入以下 traits:
~~~
use Authenticatable, CanResetPassword;
~~~
如果你引入了上面的 `traits`,从 `use` 区块和类声明中移除 `Illuminate\Auth\Reminders\RemindableTrait` 和 `Illuminate\Auth\UserTrait`
## Cashier 的用户需要的修改
Laravel Cashier 的 trait 和接口名称已作修改。trait 请改用 `Laravel\Cashier\Billable` 取代 `BillableTrait`。接口请改用 `Laravel\Cashier\Contracts\Billable` 取代 `Larave\Cashier\BillableInterface` 。不需要修改任何方法。
## Artisan 命令
将所有的命令从旧的 `app/commands` 目录移到新的 `app/Console/Commands` 目录。接下来,把 `app/Console/Commands` 目录添加到 `composer.json` 的 `classmap` 中。
然后,复制 Artisan 命令列表从 `start/artisan.php` 到 `app/Console/Kernel.php` 文件的 command 数组内。
## 数据库迁移和数据填充
如果在您的数据库内已经有 `users` 表,请移除 Laravel 5 内置的两个迁移文件。
将所有的迁移文件从旧的 `app/database/migrations` 目录复制到新的 `database/migrations` 。所有的数据填充文件也要从 `app/database/seeds` 复制到 `database/seeds`。
## 全局 IoC 绑定
若您在 `start/global.php` 有绑定任何 IoC,请将它们复制到 `app/Providers/AppServiceProvider.php` 内的 `register` 方法,您可能需要引入 App facade。
你可以选择将这些绑定,依照类型拆分到不同的服务提供者中。
## 视图
将所有的视图从旧的 `app/views` 复制到新的 `resources/views` 目录内。
## Blade 标签修改
从安全的角度考虑,Laravel 5.0 会过滤所有输出,不论您使用 `{{ }}` 或 `{{{ }}}` 标签。您可以使用 `{!! !!}` 新的标签来取消输出过滤。请务必 确定 输出内容是安全地才使用 `{!! !!}` 标签。
不过,如果您 仍然必须 使用旧的 Blade 语法,请在 `AppServiceProvider@register` 开头加入以下内容:
~~~
\Blade::setRawTags('{{', '}}');
\Blade::setContentTags('{{{', '}}}');
\Blade::setEscapedContentTags('{{{', '}}}');
~~~
但是轻易不要这样做,这可能使您的应用进程更加容易受到 XSS 攻击,并且用 `{{--` 来注释代码将不再起作用。
## 多语言配置文件
将所有的多语言配置文件从旧的 `app/lang` 目录复制到新的`resources/lang` 目录。
## 公开目录
将 4.2 版公共目录内的资源复制到新应用程序内的public 目录。并确认保留 5.0 版的 index.php 文件。
## 测试
将所有的测试文件从旧的 `app/tests` 复制到 `tests` 目录。
## 各式各样的文件
复制项目内其他各式各样的文件,例如:`.scrutinizer.yml`, `bower.json` 以及其他类似工具的设置文件。
您可以将 Sass,Less 或 CoffeeScript 移动到任何您想放置的地方。 `resources/assets` 目录是一个不错的默认位置。
## 表单和 HTML 辅助函数
如果您使用表单或 HTML 辅助函数,您将会看到以下错误 `class 'Form' not found` 或 `class 'Html' not found` 。`Form` 类以及 `HTML` 辅助函数在 Laravel 5.0 中已经废弃了;不过,这里有一些替代方法,比如基于社区驱动的,由 `Laravel Collective` 维护。
比如,你可以在 composer.json 文件中的 require 区块增加 "laravelcollective/html": "~5.0"。
您也需要添加表单和 HTML 的 facades 以及服务提供者。 编辑 `config/app.php` 文件,添加此行到 'providers' 数组内:
~~~
'Collective\Html\HtmlServiceProvider',
~~~
接着,添加以下到 'aliases' 数组内:
~~~
'Form' => 'Collective\Html\FormFacade',
'Html' => 'Collective\Html\HtmlFacade',
~~~
## 缓存管理员
如果您的程序注入 `Illuminate\Cache\CacheManager` 来取得非 Facade 版本的 Laravel 缓存,请改用 `Illuminate\Contracts\Cache\Repository` 注入。
## 分页
请将所有的 `$paginator->links()` 用 `$paginator->render()` 取代。
Replace any calls to $paginator->getFrom() and $paginator->getTo() with $paginator->firstItem() and $paginator->lastItem() respectively.
Remove the "get" prefix from calls to $paginator->getPerPage(), $paginator->getCurrentPage(), $paginator->getLastPage() and $paginator->getTotal() (e.g. $paginator->perPage()).
## Beanstalk 队列
Laravel 5.0 使用 `"pda/pheanstalk": "~3.0"` 取代原本的 `"pda/pheanstalk": "~2.1"`。
## Remote
Remote 组件已不再使用。
## 工作区
工作区组件已不再使用。
- 前言
- 发行说明/L5新特性
- 升级向导
- 升级到 5.0.16
- 从 4.2 升级到 5.0
- 从 4.1 升级到 4.2
- 从 4.1.x 升级到 4.1.29
- 从 4.1.25 升级到 4.1.26
- 从 4.0 升级到 4.1
- 贡献向导
- 环境配置
- 安装
- 配置
- 基本功能
- 路由
- 基本路由
- CSRF 保护
- 方法欺骗
- 路由参数
- 命名路由
- 路由群组
- 路由模型绑定
- 抛出 404 错误
- 中间件
- 建立中间件
- 注册中间件
- 可终止中间件
- 控制器
- 基础控制器
- 控制器中间件
- 隐式控制器
- RESTful 资源控制器
- 请求
- 取得请求实例
- 取得输入数据
- 旧输入数据
- Cookies
- 上传文件
- 其他的请求信息
- 响应
- 基本响应
- 重定向
- 其他响应
- 响应宏
- 系统架构
- 服务提供者
- 基本提供者例子
- 注册提供者
- 缓载提供者
- 服务容器
- 基本用法
- 将接口绑定到实现
- 上下文绑定
- 标签
- 实际应用
- 容器事件
- 参考:理解PHP 依赖注入|Laravel IoC容器
- Contracts
- 为什么用 Contracts
- Contract 参考
- 如何使用 Contracts
- Facades
- 实际用法
- 建立 Facades
- 模拟 Facades
- Facade 类参考
- 请求的生命周期
- 生命周期概要
- 聚焦于服务提供者
- 应用程序结构
- 根目录
- App 目录
- 为应用程序配置命名空间
- 系统服务
- 认证
- 用户认证
- 取得经过认证的用户
- 保护路由
- HTTP 基本认证
- 忘记密码与重设
- 第三方登陆认证
- 交易
- 配置文件
- 订购方案
- 一次性付款
- Single Charges
- 免信用卡试用
- 订购转换
- 订购数量
- 取消订购
- 恢复订购
- 确认订购状态
- 处理失败订阅
- 处理其它 Stripe Webhooks
- 收据
- 缓存
- 配置
- 缓存用法
- 递增与递减
- 缓存标签
- 缓存事件
- 数据库缓存
- 集合
- Command Bus
- 建立命令
- 调用命令
- 命令队列
- 命令管道
- 核心扩展
- 管理者和工厂
- 缓存
- Session
- 认证
- 基于服务容器的扩展
- Laravel Elixir
- 安装与配置
- 使用方式
- Gulp
- Custom Tasks and Extensions
- 加密
- Envoy 任务执行器
- 安装
- 执行任务
- 多服务器
- 并行执行
- 任务宏
- 通知
- 更新 Envoy
- 错误与日志
- 配置
- 错误处理
- HTTP 异常
- 日志
- 事件
- 基本用法
- 事件处理队列
- 事件订阅者
- 文件系统与云存储
- 配置文件
- 基本用法
- 自定义文件系统
- 哈希
- 基本用法
- 辅助方法
- 数组
- 路径
- 路由
- 字符串
- 网址(URL)
- 其他
- 本地化
- 语言文件
- 基本用法
- 复数
- 验证
- 覆写扩展包的语言文件
- 邮件
- 配置
- 基本用法
- 内嵌附件
- 邮件队列
- 邮件与本地端开发
- 扩展包开发
- 视图
- 语言
- 配置文件
- 公共资源
- 发布分类文件
- 路由
- 分页
- 配置
- 使用
- 追加分页链接
- 转换至 JSON
- 队列
- 设置
- 基本用法
- 队列闭包
- 执行一个队列监听
- 常驻队列处理器
- 推送队列
- 已失败的工作
- 会话
- 配置
- 使用 Session
- 暂存数据(Flash Data)
- 数据库 Sessions
- Session 驱动
- 模板
- Blade 模板
- Blade 控制语法结构
- Blade 扩展
- 参考:@section与@yield 介绍
- 单元测试
- 定义并执行测试
- 测试环境
- 从测试调用路由
- 模拟 Facades
- 框架 Assertions
- 辅助方法
- 重置应用程序
- 表单验证
- 基本用法
- 控制器验证
- 表单请求验证
- 使用错误信息
- 错误信息 & 视图
- 可用验证规则
- 条件验证规则
- 自定义错误信息
- 自定义验证规则
- 数据库
- 使用基础
- 配置
- 读取/写入连接
- 执行查找
- 数据库事务处理
- 获取连接
- 日志记录
- 查询构造器
- Selects
- Joins
- 高级 Wheres
- 聚合
- 原生表达式
- 添加
- 更新
- 删除
- Unions
- 悲观锁定 (Pessimistic Locking)
- Eloquent ORM
- 基本用法
- 批量赋值
- 新增,更新,删除
- 软删除
- 时间戳
- 范围查询
- Global Scopes
- 关联
- 关联查询
- 预载入
- 新增关联模型
- 更新上层时间戳
- 使用枢纽表
- 集合
- 获取器和修改器
- 日期转换器
- 属性类型转换
- 模型事件
- 模型观察者
- 模型 URL 生成
- 转换成数组 / JSON
- 结构生成器
- 建立与删除数据表
- 加入字段
- 修改字段
- 修改字段名称
- 移除字段
- 检查是否存在
- 加入索引
- 外键
- 移除索引
- 移除时间戳记和软删除
- 保存引擎
- 迁移和数据填充
- 建立迁移文件
- 执行迁移
- 回滚迁移
- 数据填充
- Redis
- 配置
- 使用方式
- 管道
- 开发包
- Confide 用户身份认证
- Entrust 权限管理
- Shoppingcart 购物车
- Genertators 代码生成工具
- IDE Helper IDE助手
- Artisan 命令行工具
- 概览
- 用法
- 在命令行接口以外的地方调用命令
- 定时调用 Artisan 命令
- 开发
- 建立自定义命令
- 注册自定义命令