升级指南
- 升级到 5.1.11
- 升级到 5.1.0
- 升级到 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
升级到 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:
'Gate' => Illuminate\Support\Facades\Gate::class,
更新用户模型
其次,在您的 App\User
模型上使用 Illuminate\Foundation\Auth\Access\Authorizable
trait 和 Illuminate\Contracts\Auth\Access\Authorizable
合约:
<?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
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
变量更新为以下内容:
$compiledPath = __DIR__.'/cache/compiled.php';
创建 bootstrap/cache
目录
在您的 bootstrap
目录中,创建一个 cache
目录 (bootstrap/cache
)。在此目录中放置一个 .gitignore
文件,内容如下:
*
!.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
参数的默认值设置为一个数组:
public static function create(array $attributes = [])
{
// 您的自定义实现
}
find
方法
如果您在自己的模型中重写了 find
方法并在自定义方法中调用 parent::find()
,您现在应该更改为在 Eloquent 查询构建器上调用 find
方法:
public static function find($id, $columns = ['*'])
{
$model = static::query()->find($id, $columns);
// ...
return $model;
}
lists
方法
lists
方法现在为 Eloquent 查询返回一个 Collection
实例,而不是一个普通数组。如果您想将 Collection
转换为普通数组,请使用 all
方法:
User::lists('id')->all();
请注意,查询构建器的 lists
方法仍然返回一个数组。
日期格式化
以前,可以通过在模型上重写 getDateFormat
方法来修改 Eloquent 日期字段的存储格式。这仍然是可能的;但是,为了方便起见,您可以简单地在模型上指定一个 $dateFormat
属性,而不是重写方法。
日期格式现在也在将模型序列化为 array
或 JSON 时应用。这可能会在从 Laravel 5.0 迁移到 5.1 时更改 JSON 序列化日期字段的格式。要为序列化模型设置特定的日期格式,您可以在模型上重写 serializeDate(DateTime $date)
方法。此方法允许您在不更改存储格式的情况下对序列化的 Eloquent 日期字段进行细粒度控制。
集合类
sort
方法
sort
方法现在返回一个新的集合实例,而不是修改现有的集合:
$collection = $collection->sort($callback);
sortBy
方法
sortBy
方法现在返回一个新的集合实例,而不是修改现有的集合:
$collection = $collection->sortBy('name');
groupBy
方法
groupBy
方法现在为父 Collection
中的每个项目返回 Collection
实例。如果您想将所有项目转换回普通数组,您可以 map
它们:
$collection->groupBy('type')->map(function($item)
{
return $item->all();
});
lists
方法
lists
方法现在为 Eloquent 查询返回一个 Collection
实例,而不是一个普通数组。如果您想将 Collection
转换为普通数组,请使用 all
方法:
$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
文件:
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
变量更新为:
$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
数组中删除此行:
'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
函数手动缓存查询。有关缓存的更多信息,请查阅完整文档。
用户认证模型
要升级您的 User
模型以适应 Laravel 5 的认证系统,请按照以下说明进行操作:
从 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
在类声明中包含以下 trait:
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
的底部添加以下行:
\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' 数组中添加此行:
'Collective\Html\HtmlServiceProvider',
接下来,在 'aliases' 数组中添加这些行:
'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
。
'cipher' => MCRYPT_RIJNDAEL_256
此设置可用于控制 Laravel 加密设施使用的默认密码。
在 Laravel 4.2 中,默认密码是 MCRYPT_RIJNDAEL_128
(AES),被认为是最安全的密码。将密码更改回 MCRYPT_RIJNDAEL_256
是为了解密在 Laravel <= 4.1 中加密的 cookie/值。
软删除模型现在使用 Traits
如果您使用软删除模型,softDeletes
属性已被移除。您现在必须使用 SoftDeletingTrait
,如下所示:
use Illuminate\Database\Eloquent\SoftDeletingTrait;
class User extends Eloquent
{
use SoftDeletingTrait;
}
您还必须手动将 deleted_at
列添加到您的 dates
属性中:
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
参数:
abstract public function getPageLinkWrapper($url, $page, $rel = null);
Iron.Io 队列加密
如果您使用 Iron.io 队列驱动程序,您需要在队列配置文件中添加一个新的 encrypt
选项:
'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
类:
public function getRememberToken()
{
return $this->remember_token;
}
public function setRememberToken($value)
{
$this->remember_token = $value;
}
public function getRememberTokenName()
{
return 'remember_token';
}
此更改将使所有现有的“记住我”会话失效,因此所有用户将被迫重新认证您的应用程序。
包维护者
Illuminate\Auth\UserProviderInterface
接口中添加了两个新方法。可以在默认驱动程序中找到示例实现:
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
配置部分。以下是该部分的默认值:
'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()
。