Skip to content

升级指南

升级到 5.1.11

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

lightbulb

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

创建策略目录

首先,在您的应用程序中创建一个空的 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.phproutes.phpconfig.phpservices.json

添加 BroadcastServiceProvider 提供者

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

认证

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

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

其次,Laravel 5.0 中使用的 App\Services\Registrar 类不再需要。您可以简单地将此类中的 validatorcreate 方法复制粘贴到您的 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:commandhandler:command Artisan 命令生成类。

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

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

Blade

createMatchercreateOpenMatchercreatePlainMatcher 方法已从 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_ENVAPP_KEY(您的加密密钥)、您的数据库凭据以及您的缓存和会话驱动程序。

此外,将您在旧 .env.php 文件中拥有的任何自定义值复制到 .env(本地环境的真实值)和 .env.example(其他团队成员的示例说明值)中。

有关环境配置的更多信息,请查看完整文档

lightbulb

在部署您的 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.phpboot() 方法中。在 app/Providers/RouteServiceProvider.php 中添加 use Illuminate\Support\Facades\Route; 以继续使用 Route Facade。

您不需要移动任何默认的 Laravel 4.0 过滤器,如 authcsrf;它们都在这里,但作为中间件。编辑任何引用旧默认过滤器的路由或控制器(例如 ['before' => 'auth']),并将它们更改为引用新的中间件(例如 ['middleware' => 'auth'])。

在 Laravel 5 中,过滤器没有被移除。您仍然可以使用 beforeafter 绑定和使用自己的自定义过滤器。

全局 CSRF

默认情况下,CSRF 保护在所有路由上启用。如果您想禁用此功能,或仅在某些路由上手动启用它,请从 App\Http\Kernelmiddleware 数组中删除此行:

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\RemindableTraitIlluminate\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.ymlbower.json 和其他类似的工具配置文件。

您可以将 Sass、Less 或 CoffeeScript 移动到任何您希望的位置。resources/assets 目录可能是一个不错的默认位置。

表单和 HTML 助手

如果您使用表单或 HTML 助手,您将看到错误提示 class 'Form' not foundclass '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 加密设施使用的默认密码。

lightbulb

在 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 保持不变。

lightbulb

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

视图/分页环境重命名

如果您直接引用 Illuminate\View\Environment 类或 Illuminate\Pagination\Environment 类,请更新您的代码以引用 Illuminate\View\FactoryIlluminate\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';
}
lightbulb

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

包维护者

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 配置文件中的 aliasesproviders 数组。这些数组的更新值可以在此文件中找到。确保将您的自定义和包服务提供者/别名添加回数组中。

存储库中添加新的 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()