升级指南
从 4.2 升级到 4.3
Beanstalk Queuing
Laravel 4.3 开始默认载入 "pda/pheanstalk": "~3.0"
取代 Laravel 4.2 "pda/pheanstalk": "~2.1"
。
从 4.1 升级到 4.2
PHP 5.4+
Laravel 4.2 需要 PHP 5.4.0 以上。
默认加密
增加一个新的 cipher
选项在您的 app/config/app.php
配置文件中。其选项值应为 MCRYPT_RIJNDAEL_256
。
'cipher' => MCRYPT_RIJNDAEL_256
该设置可用于设定所使用的 Laravel 加密工具的默认加密方法。
在 Laravel 4.2,默认加密方法为MCRYPT_RIJNDAEL_128
(AES), 被认为是最安全的加密. 必须将加密改回MCRYPT_RIJNDAEL_256
来解密在 Laravel <= 4.1 下加密的 cookies/values
软删除模型改用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 Queue 加密
如果您使用 Iron.io queue 驱动,您将需要增加一个新的 encrypt
选项到 您的 queue 配置文件中:
'encrypt' => true
从 4.1.x 升级到 4.1.29
Laravel 4.1.29 对于所有的数据库驱动加强了 column quoting 的部分。当您的模型中没有使用 fillable
属性,他保护您的应用程序不会受到 mass assignment 漏洞影响。如果您在模型中使用 fillable
属性来防范 mass assignment, 您的应用程序将不会有漏洞。如果您使用 guarded
且在 "更新" 或 "储存" 类型的函数中,传递了末端用户控制的数组,那您应该立即升级到 4.1.29
以避免 mass assignment 的风险。
升级到 Laravel 4.1.29,只要 composer update
即可。在这个发行版本中没有重大的更新。
从 4.1.25 升级到 4.1.26
Laravel 4.1.26 采用了针对 "记住我" cookies 的安全性更新。在此更新之前,如果一个记住我的 cookies 被恶意用户劫持,该 cookie 将还可以生存很长一段时间,即使真实用户重设密码或者登出。
此更动需要在您的 users
(或者类似的) 的数据库表中增加一个额外的 remember_token
字段。在更新之后,当用户每次登入您的应用程序将会有一个全新的 token 生成。这个 token 也会在用户登出应用程序后被更新。这个更新的影响为:如果一个"记住我"的 cookie 被劫持,只要用户登出应用程序将会废除该 cookie。
升级路径
首先,增加一个新的字段,可空值、属性为 VARCHAR(100)、TEXT 或同类型的字段 remember_token
到您的 users
数据库表中。
然后,如果您使用 Eloquent 认证驱动,依照下面更新您的 User
类的三个方法:
public function getRememberToken()
{
return $this->remember_token;
}
public function setRememberToken($value)
{
$this->remember_token = $value;
}
public function getRememberTokenName()
{
return 'remember_token';
}
所有现存的 "记住我" sessions 在此更新后将会失效,所以应用程序的所有用户将会被迫重新登入。
扩展包管理者
两个新的方法被加入到 Illuminate\Auth\UserProviderInterface
interface. 例子实现方式可以在默认驱 动中找到:
public function retrieveByToken($identifier, $token);
public function updateRememberToken(UserInterface $user, $token);
The Illuminate\Auth\UserInterface
also received the three new methods described in the "Upgrade Path".