升级指南

未匹配的标注
本文档最新版为 6.x,旧版本可能放弃维护,推荐阅读最新版!

升级指南

从 5.4 升级到 5.5.0

Lumen 5.5 是一次维护性的版本发布,可将现有基础的 Laravel 软件包升级到 5.5 发行版。在更新你的应用程序到 Lumen 5.5 之前,你应该重新参阅一遍 Laravel 5.5 的升级指南,并根据你在 Laravel 中所使用的组件对你的应用程序作出适当的更改。

一旦你的应用程序作出了必要的调整,你可以在 composer.json 文件中升级如下 Lumen 框架依赖并运行 composer update 命令:

"laravel/lumen-framework": "5.5.*"

更新引导文件

在 Laravel 5.5 中, 服务容器实现了 PSR-11 接口,因此当尝试使用服务容器作为服务代理时,会导致其与路由中的 get 方法发生冲突。由于这个原因,bootstrap/app.php 需要更新为仅传递一个 Router 实例到 routes.php 文件。在你的 bootstrap/app.php 文件最后,调整 routes.php 文件的内容如下:

$app->router->group([
    'namespace' => 'App\Http\Controllers',
], function ($router) {
    require __DIR__.'/../routes/web.php';
});

更新路由文件

在更新了 bootstrap/app.php 文件之后,你还需要更新一下 routes/web.php 文件,将 $app 变量替换为使用 $router 变量:

$router->get('/hello', function () {
    return 'Hello World';
});

从 5.3 升级到 5.4.0

Lumen 5.4 是一次维护性的版本发布,可将现有基础的 Laravel 软件包升级到 5.4 发行版。在更新你的应用程序到 Lumen 5.4 之前,你应该重新参阅一遍 Laravel 5.4 的升级指南,并根据你在 Laravel 中所使用的组件对你的应用程序作出适当的更改

一旦你的应用程序作出了必要的调整,你可以在 composer.json 文件中升级如下 Lumen 框架依赖并运行 composer update 命令:

"laravel/lumen-framework": "5.4.*"

服务提供者中的请求

如果以前你在应用程序的某个服务提供者中访问了当前请求 request,现在你则需要重构你的代码以使用中间件来代替。

从 5.2 升级到 5.3.0

Lumen 5.3 没有改变框架结构。相反,它只是作为一个维护性的版本发布,以将现有基础的 Laravel 软件包升级到 5.3 发行版。在升级你的应用程序到 Lumen 5.3 之前,你应该重新参阅一遍 Laravel 5.3的升级指南,并根据你在 Laravel 中所使用的组件对你的应用程序作出适当的更改。

一旦你的应用程序作出了必要的调整,你可以在 composer.json 文件中升级如下 Lumen 框架依赖并运行 composer update 命令:

"laravel/lumen-framework": "5.3.*"

从 5.1 升级到 5.2.0

Lumen 5.2 的主要特性更新是更加专注于向无状态 API 的转变。因此,sessions 被从框架中移除了。如果你仍想使用这些特性,建议你将应用程序从 Lumen 5.1 升级到 Laravel 5.2。

要将 Lumen 的应用程序升级到完整的 Laravel 框架,只需要将路由和类文件复制到新的应用程序中即可。由于 Laravel 和 Lumen 共享了许多相同的组件,因此你的类文件并不需要任何改变。

升级依赖项

更新 composer.json 文件将依赖指向 laravel/lumen-framework 5.2.*vlucas/phpdotenv ~2.2

启动文件

bootstrap/app.php 文件中,你需要将 Dotenv::load(...) 方法的调用修改为如下所示:

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    //
}

Application contract

Lumen不再依赖于 Illuminate\Contracts\Foundation\Application contract。所有 Application contract 类型提示的地方都必须修改为引用 Laravel\Lumen\Application

用户认证

由于 Lumen 不再支持 session 的使用,因此无状态的用户认证则完全依赖于传递 API 令牌或 header 头信息来实现。关于用户认证系统的更多信息,请参阅完整的用户认证文档

集合

Eloquent 基类集合

现在,Eloquent 集合实例会为以下方法返回一个基类集合(Illuminate\Support\Collection):pluckkeyszipcollapseflattenflip

保留键名

现在,slicechunkreverse 方法都会保留集合的键名。但如果你不想这些方法保留键名,在 Collection 实例上调用 values 方法即可。

数据库

MySQL 日期

从 MySQL 5.7 开始,strict 严格模式是被默认开启的,所以像 0000-00-00 00:00:00 这样的不再是有效格式的日期。在向数据库中插入记录时,所有 timestamp 类型的字段都必须是一个有效的默认值。你可以在迁移文件中使用 useCurrent 方法来将 timestamp 字段默认为当前时间,或者你也可以将其设置为 nullable 以允许其接收 null 值:

$table->timestamp('foo')->nullable();

$table->timestamp('foo')->useCurrent();

$table->nullableTimestamps();

MySQL JSON 字段类型

在 MySQL 驱动下,json 字段类型现在会被真实地创建为 JSON 字段。但如果你没有使用 MySQL 5.7 或更高版本,则将无法使用此字段类型,你可以在迁移文件中使用 text 字段类型来代替。

Eloquent

日期转换

当调用模型或模型集合的 toArray 方法时,任何被添加到 $casts 的属性比如 datedatetime,现在都会被转换为字符串类型。这使日期转换与 $dates 数组中指定的日期保持一致。

全局作用域

为了使用方便,我们已经重写全局作用域的实现。因此全局作用域不再需要 remove 方法,你可以在所有写了该方法的全局作用域中将其移除。

如果你曾在 Eloquent 查询构造器上调用过 getQuery 方法来访问底层的查询构造实例,现在你得改为调用 toBase 方法。

无论你曾出于任何原因只要调用过 remove 方法,现在都得修改为调用 $eloquentBuilder->withoutGlobalScope($scope)

在 Eloquent 查询构造器中,现在新增了 withoutGlobalScopewithoutGlobalScopes 方法,之前所有调用了 $model->removeGlobalScopes($builder) 的地方现在都得修改为 $builder->withoutGlobalScopes()

主键

默认情况下,Eloquent 会默认主键为 integer 整型,并自动将其强制为 integer 整型来处理。但如果你的主键并不是整型,请在 Eloquent 模型上重写 $incrementing 属性设置为 false

/**
 * 标示 ID 主键是否自动增长。
 *
 * @var bool
 */
public $incrementing = true;

异常处理

你的 App\Exceptions\Handler 类的 $dontReport 属性应被更新为至少包含以下的异常类:

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

/**
 * 忽略的异常类型的列表
 *
 * @var array
 */
protected $dontReport = [
    AuthorizationException::class,
    HttpException::class,
    ModelNotFoundException::class,
    ValidationException::class,
];

IronMQ

IronMQ 队列驱动已被移至自己的扩展包中,不再和核心框架打包在一起。

github.com/LaravelCollective/iron-q...

Storage 文件系统

如果你使用了 Laravel 的 Flysystem 集成,那么你还需要注册 filesystem 绑定。添加以下代码到 bootstrap/app.php 文件中:

$app->singleton('filesystem', function ($app) {
    return $app->loadComponent(
        'filesystems',
        Illuminate\Filesystem\FilesystemServiceProvider::class,
        'filesystem'
    );
});

数据验证

原先的 ValidatesRequests trait 已被整合到 Lumen 基类控制器使用的 ProvidesConvenienceMethods trait 中。

如果你曾在基类控制器外使用过 ValidatesRequests trait,你可以从 5.1 分支复制过来或者使用完整的 ProvidesConvenienceMethods trait。

测试

DatabaseMigrationsDatabaseTransactions traits 之前文件存放的位置 Illuminate\Foundation\Testing\DatabaseMigrationsIlluminate\Foundation\Testing\DatabaseTransactions 已经发生了变动,请在你的测试中跟新来使用新的命名空间:

<?php

use Laravel\Lumen\Testing\DatabaseMigrations;
use Laravel\Lumen\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    use DatabaseMigrations;
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/lumen/5.5/upgra...

译文地址:https://learnku.com/docs/lumen/5.5/upgra...

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:4
讨论数量: 0
发起讨论 只看当前版本


暂无话题~