2015-01-11 10069次浏览
  1. 路由别名
  2. 依赖组件配置
  3. 不可变的 Slug
  4. DatePicker Language Fallback
  5. 传递验证错误

我们很高兴的宣布 Yii Framework 2.0.2 版本发布了。请参考说明 http://www.yiiframework.com/download/ 安装或升级到此版本。

2.0.2 版本是 Yii 2.0 的一个补丁版,包含大约 40 个小的新功能和 bug 修复。关于这个版本更新的完整列表,请参阅更新日志。在此我们感谢所有的花费宝贵时间来帮助提升 Yii 并且使这次发布成为可能的所有贡献者。

你可以通过在 GitHub 上 starring 或者 watching Yii 2.0 GitHub 项目来跟踪 Yii 2 的开发进度。你可以通过 Yii Twitter feeds 或者加入 Yii Facebook group 来联系其他的 Yii 开发者。

在本次发布中我们总结了一些最重要的功能,如下。

路由别名

之前,核心框架代码仅支持代表文件路径和 URLs 的别名。现在添加路径别名的支持。特别地,您可以为路径创建一个别名,并且当你需要为它创建一个 URL 然后使用别名来引用路径。路径别名主要通过 Url::to() 和 Url::toRoute() 帮助方法来支持。例如,

use yii\helpers\Url;
 
Yii::setAlias('@posts', 'post/index');
 
// /index.php?r=post/index
echo Url::to(['@posts']);
echo Url::toRoute('@posts');

你可能会发现,当你的路由设计还没有完全确定下来时,并且你的路由设计有更改,你想避免去修改每一个相关的 URL 生成代码,路由别名很有用处。

依赖组件配置

许多组件包含的属性需要通过依赖应用组件的 ID 进行配置,像 yii\caching\DbCache::db, yii\web\CacheSession::cache 这些。但是有的时候为了避免引入新的应用组件或者为了单元测试,你可能想直接通过一个配置数组来配置属性,并创建依赖组件,你可以像下面这样来实现:

$cache = Yii::createObject([
    'class' => 'yii\caching\DbCache',
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => '...',
    ],
]);

如果你现在正在基于一个外部组件来开发一个新类,你可以使用下面的方法来获得类似的支持:

use yii\base\Object;
use yii\db\Connection;
use yii\di\Instance;
 
class MyClass extends Object 
{
    public $db = 'db';
 
    public function init() 
    {
        $this->db = Instance::ensure($this->db, Connection::className());
    }
}

以上代码将允许按以下任意初始值配置数据库属性:

  • 代表应用组件 ID 的字符串;
  • yii\db\Connection 的实例;
  • 可以用来创建 yii\db\Connection 实例的配置数组。

不可变的 Slug

如果你正在使用 yii\behaviors\SluggableBehavior,你可以使用一个新的属性来命名 immutable。通过设置这个属性为 true,如果一个 slug 之前已经被生成,它将不会再改变,即使相应的源属性值已经被改变。这对于 SEO 为目的特别有用,因为你不想改变使用 slug 来发布的 URL。

DatePicker Language Fallback

yii\jui\DatePicker 挂件现在支持 language 回退,当你配置了它的语言属性包含地区和或 ... 很有用。例如,如果你设置 language 为 de-DE,挂件找不到名称为 /ui/i18n/datepicker-de-DE.js 语言文件时,它将会回退 language 为 de,并尝试使用 /ui/i18n/datepicker-de.js 语言文件。

传递验证错误

现在 yii\base\Model 类有了一个很方便的方法 addErrors(),它允许你将验证错误从一个模型转移到另一个模型。例如,如果你有一个表单模型类包含活动记录模型类,你可能会想传递表单验证错误到活动记录类,你可以简单地调用这个方法来实现:

use yii\base\Model;
use yii\db\ActiveRecord;
 
class MyForm extends Model 
{
    public $model;
 
    public function process()
    {
        // ...
        if (!$this->validate()) {
            $this->model->addErrors($this->getErrors());
            // ....
        }
    }
}