Skip to content

升级指南

从 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_256 更改为 MCRYPT_RIJNDAEL_128(AES),后者被认为是最安全的密码。将密码更改回 MCRYPT_RIJNDAEL_256 是必要的,以解密在 Laravel <= 4.1 中加密的 cookies/值。

软删除模型现在使用 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 引入了“记住我” cookies 的安全改进。在此更新之前,如果一个记住 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,请在你的 composer.json 文件中将 laravel/framework 版本更改为 4.1.*

替换文件

来自仓库的这个新副本 替换你的 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' => array(
	'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 文件,以处理尾部斜杠。

当前路由访问

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

Composer 更新

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

通配符事件监听器

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