升级指南
从 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_256
更改为 MCRYPT_RIJNDAEL_128
(AES),后者被认为是最安全的密码。将密码更改回 MCRYPT_RIJNDAEL_256
是必要的,以解密在 Laravel <= 4.1 中加密的 cookies/值。
软删除模型现在使用 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 引入了“记住我” cookies 的安全改进。在此更新之前,如果一个记住 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,请在你的 composer.json
文件中将 laravel/framework
版本更改为 4.1.*
。
替换文件
用 来自仓库的这个新副本 替换你的 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' => 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()
。