升级指南
从 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 加密功能使用的默认密码。
NOTE
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 保持不变。
NOTE
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';
}NOTE
此更改将使所有现有的“记住我”会话无效,因此所有用户将被迫重新验证他们的应用程序。
包维护者
在 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()。