バージョン2.0.2はYii 2.0パッチリリースであり、約40のマイナーな機能強化と修正が含まれています。 変更の完全なリストはGitHubにあります 。 このリリースの準備を手伝ってくれたみんなに感謝します 。
Yii 2の開発プロセスをフォローしたい場合は、アスタリスクを付けるか、GitHubのプロジェクトページの監視ボタンを使用します 。 TwitterとFacebookもあります。
このリリースへの最も重要な追加を検討してください。
ルートエイリアス
2.0.2より前では、YiiはパスエイリアスとURLをサポートしていました。 ルートのエイリアスを設定できるようになりました。 ルートエイリアスを設定したら、
Url::to()
および
Url::toRoute()
を使用してURLを作成するときに使用できます。
use yii\helpers\Url; Yii::setAlias('@posts', 'post/index'); // /index.php?r=post/index echo Url::to(['@posts']); echo Url::toRoute('@posts');
この機能は、ルート構造の変更が予想される場合に役立ちます。 エイリアスを使用する場合、URL作成コードを変更する必要はありません。
依存コンポーネントの構成
多くのコンポーネントのプロパティは、
yii\caching\DbCache::db
または
yii\web\CacheSession::cache
などの他のコンポーネントのIDを取得します。 場合によっては、単体テスト用の新しいコンポーネントを作成しないために、構成配列を使用してこのプロパティを設定する必要があります。
$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()); } }
上記のコードを使用すると、次のいずれかの値で
db
プロパティを構成できます。
- アプリケーションコンポーネントIDを含む行。
- クラス
yii\db\Connection
オブジェクト。 -
yii\db\Connection
インスタンス化に使用できる設定の配列。
不変のナメクジ
yii\behaviors\SluggableBehavior
を使用する場合、新しいプロパティ
immutable
を
true
設定できるようになりました。 この場合、一度作成されたスラッグは、モデルを再度保存しても変更されません。 これはSEOに便利です。一度インデックス付けされたコンテンツは同じURLのままになります。
DatePickerウィジェットで代替言語を自動的に選択する
yii\jui\DatePicker
は、指定された言語が見つからない場合、代替言語を自動的に選択するようになりました。 これは、地域やバリアントを含むロケールIDとして
language
プロパティを設定するときに便利です。 たとえば、
language
を
de-DE
設定し、ウィジェットが言語ファイル
/ui/i18n/datepicker-de-DE.js
見つけられない場合、言語
de
およびファイル
/ui/i18n/datepicker-de.js
自動的に使用されます。
検証エラーの転送
yii\base\Model
クラスには、1つのモデルから別のモデルに検証エラーを渡すことができる
addErrors()
メソッドが含まれるようになりました。 たとえば、ActiveRecordモデルのフォームクラスがあり、ActiveRecordモデルにフォーム検証エラーを渡す必要がある場合、次のようにこれを行うことができます。
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()); // .... } } }