Skip to content
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

升级指南 ​

升级到 5.1.11 ​

Laravel 5.1.11 包括对授权和策略的支持。将这些新功能集成到现有的 Laravel 5.1 应用程序中非常简单。

注意

这些升级是可选的,忽略它们不会影响您的应用程序。

创建策略目录 ​

首先,在您的应用程序中创建一个空的 app/Policies 目录。

创建/注册 AuthServiceProvider 和 Gate Facade ​

在 app/Providers 目录中创建一个 AuthServiceProvider。您可以从 GitHub 复制默认提供者的内容。如果您的应用程序使用自定义命名空间,请记得更改提供者的命名空间。创建提供者后,请确保在 app.php 配置文件的 providers 数组中注册它。

此外,您还应该在 app.php 配置文件的 aliases 数组中注册 Gate facade:

php
'Gate' => Illuminate\Support\Facades\Gate::class,

更新用户模型 ​

其次,在您的 App\User 模型上使用 Illuminate\Foundation\Auth\Access\Authorizable trait 和 Illuminate\Contracts\Auth\Access\Authorizable 合约:

php
<?php

namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends Model implements AuthenticatableContract,
                                    AuthorizableContract,
                                    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword;
}

更新基础控制器 ​

接下来,更新您的基础 App\Http\Controllers\Controller 控制器以使用 Illuminate\Foundation\Auth\Access\AuthorizesRequests trait:

php
<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

abstract class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

升级到 5.1.0 ​

预计升级时间:少于 1 小时 ​

更新 bootstrap/autoload.php ​

将 bootstrap/autoload.php 中的 $compiledPath 变量更新为以下内容:

php
$compiledPath = __DIR__.'/cache/compiled.php';

创建 bootstrap/cache 目录 ​

在您的 bootstrap 目录中,创建一个 cache 目录 (bootstrap/cache)。在此目录中放置一个 .gitignore 文件,内容如下:

php
*
!.gitignore

此目录应可写,并将由框架用于存储临时优化文件,如 compiled.php、routes.php、config.php 和 services.json。

添加 BroadcastServiceProvider 提供者 ​

在您的 config/app.php 配置文件中,将 Illuminate\Broadcasting\BroadcastServiceProvider 添加到 providers 数组中。

认证 ​

如果您使用的是 AuthController,它使用 AuthenticatesAndRegistersUsers trait,您需要对新用户的验证和创建方式进行一些更改。

首先,您不再需要将 Guard 和 Registrar 实例传递给基类构造函数。您可以完全从控制器的构造函数中删除这些依赖项。

其次,Laravel 5.0 中使用的 App\Services\Registrar 类不再需要。您可以简单地将此类中的 validator 和 create 方法复制粘贴到您的 AuthController 中。无需对这些方法进行其他更改;但是,您应该确保在 AuthController 的顶部导入 Validator facade 和您的 User 模型。

密码控制器 ​

包含的 PasswordController 不再需要其构造函数中的任何依赖项。您可以删除 5.0 下所需的两个依赖项。

验证 ​

如果您在基类控制器类上重写了 formatValidationErrors 方法,您现在应该对 Illuminate\Contracts\Validation\Validator 合约进行类型提示,而不是具体的 Illuminate\Validation\Validator 实例。

同样,如果您在基类表单请求类上重写了 formatErrors 方法,您现在应该对 Illuminate\Contracts\Validation\Validator 合约进行类型提示,而不是具体的 Illuminate\Validation\Validator 实例。

Eloquent ​

create 方法 ​

Eloquent 的 create 方法现在可以在没有任何参数的情况下调用。如果您在自己的模型中重写了 create 方法,请将 $attributes 参数的默认值设置为一个数组:

php
public static function create(array $attributes = [])
{
    // 您的自定义实现
}

find 方法 ​

如果您在自己的模型中重写了 find 方法并在自定义方法中调用 parent::find(),您现在应该更改为在 Eloquent 查询构建器上调用 find 方法:

php
public static function find($id, $columns = ['*'])
{
    $model = static::query()->find($id, $columns);

    // ...

    return $model;
}

lists 方法 ​

lists 方法现在为 Eloquent 查询返回一个 Collection 实例,而不是一个普通数组。如果您想将 Collection 转换为普通数组,请使用 all 方法:

php
User::lists('id')->all();

请注意,查询构建器的 lists 方法仍然返回一个数组。

日期格式化 ​

以前,可以通过在模型上重写 getDateFormat 方法来修改 Eloquent 日期字段的存储格式。这仍然是可能的;但是,为了方便起见,您可以简单地在模型上指定一个 $dateFormat 属性,而不是重写方法。

日期格式现在也在将模型序列化为 array 或 JSON 时应用。这可能会在从 Laravel 5.0 迁移到 5.1 时更改 JSON 序列化日期字段的格式。要为序列化模型设置特定的日期格式,您可以在模型上重写 serializeDate(DateTime $date) 方法。此方法允许您在不更改存储格式的情况下对序列化的 Eloquent 日期字段进行细粒度控制。

集合类 ​

sort 方法 ​

sort 方法现在返回一个新的集合实例,而不是修改现有的集合:

php
$collection = $collection->sort($callback);

sortBy 方法 ​

sortBy 方法现在返回一个新的集合实例,而不是修改现有的集合:

php
$collection = $collection->sortBy('name');

groupBy 方法 ​

groupBy 方法现在为父 Collection 中的每个项目返回 Collection 实例。如果您想将所有项目转换回普通数组,您可以 map 它们:

php
$collection->groupBy('type')->map(function($item)
{
    return $item->all();
});

lists 方法 ​

lists 方法现在为 Eloquent 查询返回一个 Collection 实例,而不是一个普通数组。如果您想将 Collection 转换为普通数组,请使用 all 方法:

php
$collection->lists('id')->all();

命令和处理程序 ​

app/Commands 目录已重命名为 app/Jobs。但是,您不需要将所有命令移动到新位置,您可以继续使用 make:command 和 handler:command Artisan 命令生成类。

同样,app/Handlers 目录已重命名为 app/Listeners,现在仅包含事件监听器。但是,您不需要移动或重命名现有的命令和事件处理程序,您可以继续使用 handler:event 命令生成事件处理程序。

通过为 Laravel 5.0 文件夹结构提供向后兼容性,您可以将应用程序升级到 Laravel 5.1,并在方便时慢慢将事件和命令升级到新位置。

Blade ​

createMatcher、createOpenMatcher 和 createPlainMatcher 方法已从 Blade 编译器中移除。使用新的 directive 方法在 Laravel 5.1 中为 Blade 创建自定义指令。有关更多信息,请查阅扩展 Blade 文档。

测试 ​

将受保护的 $baseUrl 属性添加到 tests/TestCase.php 文件:

php
protected $baseUrl = 'http://localhost';

翻译文件 ​

发布的供应商包的默认语言文件目录已移动。将任何供应商包语言文件从 resources/lang/packages/{locale}/{namespace} 移动到 resources/lang/vendor/{namespace}/{locale} 目录。例如,Acme/Anvil 包的 acme/anvil::foo 命名空间的英文语言文件将从 resources/lang/packages/en/acme/anvil/foo.php 移动到 resources/lang/vendor/acme/anvil/en/foo.php。

亚马逊 Web 服务 SDK ​

如果您使用 AWS SQS 队列驱动程序或 AWS SES 电子邮件驱动程序,您应该将已安装的 AWS PHP SDK 更新到版本 3.0。

如果您使用 Amazon S3 文件系统驱动程序,您需要通过 Composer 更新相应的 Flysystem 包:

  • Amazon S3: league/flysystem-aws-s3-v3 ~1.0

弃用 ​

以下 Laravel 功能已被弃用,并将在 2015 年 12 月发布的 Laravel 5.2 中完全移除:

  • 路由过滤器已被弃用,建议使用中间件。
  • Illuminate\Contracts\Routing\Middleware 合约已被弃用。您的中间件不需要任何合约。此外,TerminableMiddleware 合约也已被弃用。无需实现接口,只需在中间件上定义一个 terminate 方法。
  • Illuminate\Contracts\Queue\ShouldBeQueued 合约已被弃用,建议使用 Illuminate\Contracts\Queue\ShouldQueue。
  • Iron.io "push queues" 已被弃用,建议使用典型的 Iron.io 队列和队列监听器。
  • Illuminate\Foundation\Bus\DispatchesCommands trait 已被弃用并重命名为 Illuminate\Foundation\Bus\DispatchesJobs。
  • Illuminate\Container\BindingResolutionException 已移动到 Illuminate\Contracts\Container\BindingResolutionException。
  • 服务容器的 bindShared 方法已被弃用,建议使用 singleton 方法。
  • Eloquent 和查询构建器的 pluck 方法已被弃用并重命名为 value。
  • 集合的 fetch 方法已被弃用,建议使用 pluck 方法。
  • array_fetch 助手已被弃用,建议使用 array_pluck 方法。

升级到 5.0.16 ​

在您的 bootstrap/autoload.php 文件中,将 $compiledPath 变量更新为:

php
$compiledPath = __DIR__.'/../vendor/compiled.php';

从 4.2 升级到 5.0 ​

全新安装,然后迁移 ​

推荐的升级方法是创建一个新的 Laravel 5.0 安装,然后将您的 4.2 站点的独特应用程序文件复制到新应用程序中。这包括控制器、路由、Eloquent 模型、Artisan 命令、资产和其他特定于应用程序的代码文件。

首先,在本地环境中安装一个新的 Laravel 5.0 应用程序到一个新目录中。不要安装任何版本高于 5.0 的版本,因为我们需要先完成 5.0 的迁移步骤。我们将在下面更详细地讨论迁移过程的每个部分。

Composer 依赖项和包 ​

不要忘记将任何额外的 Composer 依赖项复制到您的 5.0 应用程序中。这包括第三方代码,如 SDK。

某些 Laravel 特定的包可能在初次发布时不兼容 Laravel 5。请与您的包维护者联系,以确定适用于 Laravel 5 的包的正确版本。添加应用程序所需的任何额外 Composer 依赖项后,运行 composer update。

命名空间 ​

默认情况下,Laravel 4 应用程序没有在应用程序代码中使用命名空间。因此,例如,所有 Eloquent 模型和控制器都简单地位于“全局”命名空间中。为了更快的迁移,您可以简单地将这些类保留在 Laravel 5 中的全局命名空间中。

配置 ​

迁移环境变量 ​

将新的 .env.example 文件复制到 .env,这是旧 .env.php 文件的 5.0 等效文件。在此处设置任何适当的值,如您的 APP_ENV 和 APP_KEY(您的加密密钥)、您的数据库凭据以及您的缓存和会话驱动程序。

此外,将您在旧 .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 文件添加更多键,请在 .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 数组中删除此行:

php
'App\Http\Middleware\VerifyCsrfToken',

如果您想在其他地方使用它,请将此行添加到 $routeMiddleware:

php
'csrf' => 'App\Http\Middleware\VerifyCsrfToken',

现在,您可以使用 ['middleware' => 'csrf'] 将中间件添加到单个路由/控制器。有关中间件的更多信息,请查阅完整文档。

Eloquent 模型 ​

可以随意创建一个新的 app/Models 目录来存放您的 Eloquent 模型。同样,将此目录添加到 composer.json 文件的 classmap 指令中。

更新任何使用 SoftDeletingTrait 的模型以使用 Illuminate\Database\Eloquent\SoftDeletes。

Eloquent 缓存 ​

Eloquent 不再提供 remember 方法来缓存查询。您现在负责使用 Cache::remember 函数手动缓存查询。有关缓存的更多信息,请查阅完整文档。

用户认证模型 ​

要升级您的 User 模型以适应 Laravel 5 的认证系统,请按照以下说明进行操作:

从 use 块中删除以下内容:

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

将以下内容添加到 use 块中:

php
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 接口。

将类标记为实现以下接口:

php
implements AuthenticatableContract, CanResetPasswordContract

在类声明中包含以下 trait:

php
use Authenticatable, CanResetPassword;

如果您使用了它们,请从 use 块和类声明中删除 Illuminate\Auth\Reminders\RemindableTrait 和 Illuminate\Auth\UserTrait。

Cashier 用户更改 ​

Laravel Cashier 使用的 trait 和接口名称已更改。使用 Laravel\Cashier\Billable trait,而不是 BillableTrait。并且,使用 Laravel\Cashier\Contracts\Billable 接口,而不是 Laravel\Cashier\BillableInterface。不需要其他方法更改。

Artisan 命令 ​

将所有命令类从旧的 app/commands 目录移动到新的 app/Console/Commands 目录。接下来,将 app/Console/Commands 目录添加到 composer.json 文件的 classmap 指令中。

然后,将 start/artisan.php 中的 Artisan 命令列表复制到 app/Console/Kernel.php 文件的 command 数组中。

数据库迁移和种子 ​

删除 Laravel 5.0 附带的两个迁移,因为您应该已经在数据库中有用户表。

将所有迁移类从旧的 app/database/migrations 目录移动到新的 database/migrations。将所有种子从 app/database/seeds 移动到 database/seeds。

全局 IoC 绑定 ​

如果您在 start/global.php 中有任何服务容器绑定,请将它们全部移动到 app/Providers/AppServiceProvider.php 文件的 register 方法中。您可能需要导入 App facade。

可选地,您可以按类别将这些绑定分解为单独的服务提供者。

视图 ​

将视图从 app/views 移动到新的 resources/views 目录。

Blade 标签更改 ​

为了更好的默认安全性,Laravel 5.0 会对 {{ }} 和 {{{ }}} Blade 指令的所有输出进行转义。引入了新的 {!! !!} 指令来显示原始、未转义的输出。在升级应用程序时,最安全的选项是仅在您确定显示原始输出是安全的情况下使用新的 {!! !!} 指令。

但是,如果您必须使用旧的 Blade 语法,请在 AppServiceProvider@register 的底部添加以下行:

php
\Blade::setRawTags('{{', '}}');
\Blade::setContentTags('{{{', '}}}');
\Blade::setEscapedContentTags('{{{', '}}}');

这不应轻易进行,可能会使您的应用程序更容易受到 XSS 攻击。此外,使用 {{-- 的注释将不再有效。

翻译文件 ​

将语言文件从 app/lang 移动到新的 resources/lang 目录。

公共目录 ​

将应用程序的公共资产从 4.2 应用程序的 public 目录复制到新应用程序的 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。表单和 HTML 助手在 Laravel 5.0 中已被弃用;但是,有社区驱动的替代品,如 Laravel Collective 维护的那些。

例如,您可以在 composer.json 文件的 require 部分中添加 "laravelcollective/html": "~5.0"。

您还需要添加表单和 HTML facade 和服务提供者。编辑 config/app.php 并在 'providers' 数组中添加此行:

php
'Collective\Html\HtmlServiceProvider',

接下来,在 'aliases' 数组中添加这些行:

php
'Form' => 'Collective\Html\FormFacade',
'Html' => 'Collective\Html\HtmlFacade',

CacheManager ​

如果您的应用程序代码注入 Illuminate\Cache\CacheManager 以获取非 Facade 版本的 Laravel 缓存,请注入 Illuminate\Contracts\Cache\Repository。

分页 ​

将任何对 $paginator->links() 的调用替换为 $paginator->render()。

将任何对 $paginator->getFrom() 和 $paginator->getTo() 的调用替换为 $paginator->firstItem() 和 $paginator->lastItem()。

从对 $paginator->getPerPage()、$paginator->getCurrentPage()、$paginator->getLastPage() 和 $paginator->getTotal() 的调用中删除 "get" 前缀(例如 $paginator->perPage())。

Beanstalk 队列 ​

Laravel 5.0 现在需要 "pda/pheanstalk": "~3.0" 而不是 "pda/pheanstalk": "~2.1"。

远程 ​

远程组件已被弃用。

工作台 ​

工作台组件已被弃用。

从 4.1 升级到 4.2 ​

PHP 5.4+ ​

Laravel 4.2 需要 PHP 5.4.0 或更高版本。

加密默认值 ​

在您的 app/config/app.php 配置文件中添加一个新的 cipher 选项。此选项的值应为 MCRYPT_RIJNDAEL_256。

php
'cipher' => MCRYPT_RIJNDAEL_256

此设置可用于控制 Laravel 加密设施使用的默认密码。

注意

在 Laravel 4.2 中,默认密码是 MCRYPT_RIJNDAEL_128(AES),被认为是最安全的密码。将密码更改回 MCRYPT_RIJNDAEL_256 是为了解密在 Laravel <= 4.1 中加密的 cookie/值。

软删除模型现在使用 Traits ​

如果您使用软删除模型,softDeletes 属性已被移除。您现在必须使用 SoftDeletingTrait,如下所示:

php
use Illuminate\Database\Eloquent\SoftDeletingTrait;

class User extends Eloquent
{
    use SoftDeletingTrait;
}

您还必须手动将 deleted_at 列添加到您的 dates 属性中:

php
class User extends Eloquent
{
    use SoftDeletingTrait;

    protected $dates = ['deleted_at'];
}

所有软删除操作的 API 保持不变。

注意

SoftDeletingTrait 不能应用于基模型。它必须用于实际的模型类。

视图/分页环境重命名 ​

如果您直接引用 Illuminate\View\Environment 类或 Illuminate\Pagination\Environment 类,请更新您的代码以引用 Illuminate\View\Factory 和 Illuminate\Pagination\Factory。这两个类已重命名以更好地反映其功能。

分页呈现器上的附加参数 ​

如果您扩展了 Illuminate\Pagination\Presenter 类,抽象方法 getPageLinkWrapper 的签名已更改,添加了 rel 参数:

php
abstract public function getPageLinkWrapper($url, $page, $rel = null);

Iron.Io 队列加密 ​

如果您使用 Iron.io 队列驱动程序,您需要在队列配置文件中添加一个新的 encrypt 选项:

php
'encrypt' => true

从 <= 4.1.x 升级到 4.1.29 ​

Laravel 4.1.29 改进了所有数据库驱动程序的列引用。这可以保护您的应用程序免受某些批量分配漏洞的影响,当不使用模型上的 fillable 属性时。如果您在模型上使用 fillable 属性来防止批量分配,您的应用程序不会受到影响。但是,如果您使用 guarded 并将用户控制的数组传递给“更新”或“保存”类型的函数,您应该立即升级到 4.1.29,因为您的应用程序可能面临批量分配的风险。

要升级到 Laravel 4.1.29,只需 composer update。此版本中没有引入破坏性更改。

从 <= 4.1.25 升级到 4.1.26 ​

Laravel 4.1.26 引入了“记住我”cookie 的安全性改进。在此更新之前,如果一个记住 cookie 被恶意用户劫持,即使账户的真正所有者重置了密码、注销等,cookie 仍然会在很长一段时间内保持有效。

此更改需要在 users(或等效)数据库表中添加一个新的 remember_token 列。此更改后,每次用户登录到您的应用程序时,都会为用户分配一个新的令牌。用户注销应用程序时,令牌也会刷新。此更改的影响是:如果“记住我”cookie 被劫持,只需注销应用程序即可使 cookie 失效。

升级路径 ​

首先,在 users 表中添加一个新的、可为空的 remember_token,类型为 VARCHAR(100)、TEXT 或等效类型。

接下来,如果您使用 Eloquent 认证驱动程序,请使用以下三个方法更新您的 User 类:

php
public function getRememberToken()
{
    return $this->remember_token;
}

public function setRememberToken($value)
{
    $this->remember_token = $value;
}

public function getRememberTokenName()
{
    return 'remember_token';
}

注意

此更改将使所有现有的“记住我”会话失效,因此所有用户将被迫重新认证您的应用程序。

包维护者 ​

Illuminate\Auth\UserProviderInterface 接口中添加了两个新方法。可以在默认驱动程序中找到示例实现:

php
public function retrieveByToken($identifier, $token);

public function updateRememberToken(UserInterface $user, $token);

Illuminate\Auth\UserInterface 也接收了“升级路径”中描述的三个新方法。

从 4.0 升级到 4.1 ​

升级您的 Composer 依赖项 ​

要将应用程序升级到 Laravel 4.1,请将 laravel/framework 版本更改为 4.1.*,在您的 composer.json 文件中。

替换文件 ​

用存储库中的这个新副本替换您的 public/index.php 文件。

用存储库中的这个新副本替换您的 artisan 文件。

添加配置文件和选项 ​

更新您的 app/config/app.php 配置文件中的 aliases 和 providers 数组。这些数组的更新值可以在此文件中找到。确保将您的自定义和包服务提供者/别名添加回数组中。

从存储库中添加新的 app/config/remote.php 文件。

在您的 app/config/session.php 文件中添加新的 expire_on_close 配置选项。默认值应为 false。

在您的 app/config/queue.php 文件中添加新的 failed 配置部分。以下是该部分的默认值:

php
'failed' => [
    'database' => 'mysql', 'table' => 'failed_jobs',
],

(可选) 更新 app/config/view.php 文件中的 pagination 配置选项为 pagination::slider-3。

控制器更新 ​

如果 app/controllers/BaseController.php 顶部有一个 use 语句,请将 use Illuminate\Routing\Controllers\Controller; 更改为 use Illuminate\Routing\Controller;。

密码提醒更新 ​

密码提醒已被彻底改造,以提供更大的灵活性。您可以通过运行 php artisan auth:reminders-controller Artisan 命令来检查新的存根控制器。您还可以浏览更新的文档并相应地更新您的应用程序。

更新您的 app/lang/en/reminders.php 语言文件以匹配此更新文件。

环境检测更新 ​

出于安全原因,URL 域名不再用于检测您的应用程序环境。这些值很容易被伪造,允许攻击者修改请求的环境。您应该将环境检测转换为使用机器主机名(Mac、Linux 和 Windows 上的 hostname 命令)。

更简单的日志文件 ​

Laravel 现在生成一个单一的日志文件:app/storage/logs/laravel.log。但是,您仍然可以在 app/start/global.php 文件中配置此行为。

删除重定向尾随斜杠 ​

在您的 bootstrap/start.php 文件中,删除对 $app->redirectIfTrailingSlash() 的调用。此方法不再需要,因为此功能现在由框架附带的 .htaccess 文件处理。

接下来,用这个新的 Apache .htaccess 文件替换您的 Apache .htaccess 文件,该文件处理尾随斜杠。

当前路由访问 ​

当前路由现在通过 Route::current() 访问,而不是 Route::getCurrentRoute()。

Composer 更新 ​

完成上述更改后,您可以运行 composer update 函数来更新核心应用程序文件!如果您收到类加载错误,请尝试使用 --no-scripts 选项启用 update 命令,如下所示:composer update --no-scripts。

通配符事件监听器 ​

通配符事件监听器不再将事件附加到处理函数参数中。如果您需要查找触发的事件,您应该使用 Event::firing()。