Yii 2.0 RC

RC(候補リリース)PHP-framework Yii 2.0のリリースを発表できることを非常に嬉しく思います。 フレームワークをインストールまたはアップグレードするには、 yiiframework.comの指示に従ってください。

このバージョンでは、約100のエラーが修正され、200以上の改善が行われ、新しい機能が追加されました。 これは、 ベータから数えて5か月間の集中的な開発の結果です。 この間、フレームワークコミュニティは積極的に支援してくれました。 Yiiを助けてくれて 、このリリースがなければ誰も助けてくれなかったみんな感謝します。 あなたは最高です!

よくある質問







2.0 RCの大幅な改善



このリリースには、多数の便利な変更と改善があります。 以下に最も重要なものについて説明します。 変更の完全なリストはCHANGELOGにあります。 フレームワーク全般を知りたい場合は、 完全なマニュアルをお読みください。

安全性


Tom WorsterAnthony Ferraraを含むいくつかのセキュリティの専門家は、フレームワークコードのチェックを支援し、多くのコメントと提案を提供してくれました。 トムはコードの一部を書き直し、キー生成の改善、より強力な暗号化の使用、タイミング攻撃やその他の多くの種類の攻撃からの保護を可能にしました。

より便利な構成のために、 Securityヘルパーはsecurityアプリケーションのコンポーネントになりました。 その結果、 Yii::$app->security->encrypt()としてアクセスできます。

さらに、いくつかの小さいが安全に関連する変更が行われました。 たとえば、デフォルトですべてのCookieに対してhttpOnly有効になり、 yii\web\Request::enableCsrfCookiefalse設定すると、Cookieの代わりにCSRFトークンをセッションに保存できfalse

データベースを操作する


レプリケーションと読み取り/書き込み共有


コアフレームワークによって、読み取りと書き込みの分割とレプリケーションがサポートされるようになりました。 複製中、データはマスターサーバーからサーバースレーブに複製されます 。 すべての記録と更新はマスターサーバーで実行する必要があり、読み取りはスレーブサーバーから実行できます。 この機能を使用するには、次のようにデータベース接続を構成します。

 [ 'class' => 'yii\db\Connection', //   master 'dsn' => 'dsn for master server', 'username' => 'master', 'password' => '', //    slave- 'slaveConfig' => [ 'username' => 'slave', 'password' => '', ], //   slave- 'slaves' => [ ['dsn' => 'dsn  slave 1'], ['dsn' => 'dsn  slave 2'], ['dsn' => 'dsn  slave 3'], ], ] 


この構成では、以前と同じようにコードを記述できます。 要求がデータを選択すると、スレーブの1つが自動的に使用されます(サーバーの選択には単純な負荷分散アルゴリズムが使用されます)。 クエリがデータを更新または挿入する場合、マスターが使用されます。

取引


トランザクションのトピックに対していくつかの機能強化が行われました。

まず、コールバックのスタイルでトランザクションを操作できます。

 $connection->transaction(function() { $order = new Order($customer); $order->save(); $order->addItems($items); }); 


これは長いコードと同等です:

 $transaction = $connection->beginTransaction(); try { $order = new Order($customer); $order->save(); $order->addItems($items); $transaction->commit(); } catch (\Exception $e) { $transaction->rollBack(); throw $e; } 


第二に、トランザクションはいくつかのイベントをトリガーします。 たとえば、新しいトランザクションがcommitTransactionときにデータベースに接続するbeginTransactionイベントbeginTransaction発生し、 commitTransactionが成功commitTransactioncommitTransactionが発生します。 これらのイベントは、さまざまな前処理および後処理に使用できます。

最後に、開始時にトランザクション分離レベル( READ COMMITTED )を指定できます。

 $transaction = $connection->beginTransaction(Transaction::READ_COMMITTED); 


クエリ構築


クエリを作成するときに、任意の演算子を使用できるようになりました。 以下の例では、条件age >= 30に対して、 >=演算子が使用されます。 Yiiはフィールド名を適切にエスケープし、値にパラメーターバインディングを使用します。

 $query = new \yii\db\Query; $query->where(['>=', 'age', 30]); 


構築inかどうかにかかわらnotサブクエリを使用できます。

 $subquery = (new \yii\db\Query) ->select('id') ->from('user') ->where(['>=', 'age', 30]); //  ,     30  $orders = (new \yii\db\Query) ->from('order') ->where(['in', 'customer_id', $subquery]) ->all(); 


リソース管理


Yiiは、素晴らしいComposer Asset Pluginを使用してComposer経由でBowerおよびNPMパッケージ、つまりjQuery、jQuery UI、Bootstrapを使用します。

この変更のため、Yiiを使用する前にプラグインを1回インストールする必要があります。

 php composer.phar global require "fxp/composer-asset-plugin:1.0.0-beta2" 


これで、次のコマンドを使用して、 vendorディレクトリにBower jQueryパッケージをインストールできます。

 php composer.phar require bower-asset/jquery:2.1.* 


完全なガイドでリソースの詳細をお読みください

データのフォーマット


yii\base\Formatterおよびyii\i18n\Formatterを大幅にリファクタリングしました。 これでyii\i18n\Formatterクラスが1つだけになりました。 新しいフォーマッタは、PHPサーバー上のintl拡張の存在に関係なく、単一のインターフェースを提供します。 拡張機能がインストールされていない場合、フォーマットはフレームワークを使用して行われ、国際化はサポートされません。

また、日付と時刻の形式を標準化しました。 現在、主にICU形式が使用されています。 DateValidatorやJUI DatePickerなどのクラスは、デフォルトでこの形式を使用します。 PHP形式は、 php:プレフィックスを介して使用できます。

 $formatter = Yii::$app->formatter; $value = time(); echo $formatter->asDate($value, 'MM/dd/yyyy'); //  date('m/d/Y', $value) echo $formatter->asDate($value, 'php:Y/m/d'); //  date('Y/m/d', $value) echo $formatter->asDate($value, 'long'); //  date('F j, Y', $value) 


フォーム


ActiveForm JavaScriptコンポーネントも改善されています。

コールバックを使用する代わりに、検証イベントが発生するようになりました。 それらの使用は非常に簡単です。

 $('#myform').on('beforeValidate', function (event, messages, deferreds) { //         submit. //     . }); $('#myform').on('beforeSubmit', function () { //              . //      AJAX.    false  ,      . }); 


遅延検証もサポートされています。 上記の例では、 beforeValidateイベントのdeferredsパラメーターを使用して、新しいDeferredオブジェクトを追加できます。 FileValidatorImageValidatorは、遅延検証のおかげでクライアント検証をサポートするFileValidatorなりImageValidator

ActiveForm JavaScriptコードの一部のメソッドはAPIの一部になっています。これにより、クライアント側で追加されたフィールドの検証をサポートする動的フォームを簡単に作成できます。 たとえば、次のJavaScriptコードを使用して、追加した「アドレス」フィールドを検証できます。

 $('#myform').yiiActiveForm('add', { 'id': 'address', 'name': 'address', 'container': '.field-address', 'input': '#address', 'error': '.field-address .help-block' }); 


ロギングとエラー処理


ロギング時に配列およびオブジェクトをデータとして使用できます。 フレームワークに含まれるすべてのログターゲットは、デフォルトで自動的にテキスト表現に変換します。 そのクラスでは、ログの目的はそのようなデータを特別な方法で処理できます。

InvalidCallExceptionInvalidParamExceptionUnknownMethodException 、SPLのBadMethodCallExceptionから継承されるBadMethodCallExceptionになり、例外の階層がより論理的になりました。

例外を表示するときに、メソッド引数がスタックトレースに表示されるようになりました。

開発者ツール


Yiiデバッガーは、アプリケーションの進行状況に関する詳細情報を表示する非常に便利なツールです。 ロードされたリソースバンドルとそのコンテンツを表示する新しいパネルを追加しました。

Giiコードジェネレーターをコンソールから使用できるようになりました。 以前は、Webインターフェイスのみが提供されていましたが、これは非常に直感的ですが、ハードコアコンソールには好まれません。 今、誰もが幸せでなければなりません。 さらに、ジェネレーターのコードは変更されていません。 独自のジェネレータを作成する場合、二重の作業を行う必要はありません。コンソールとWebの両方で同じコードが使用されます。

コンソールでGiiを試すには、次のコマンドを実行します。

 #      cd path/to/AppBasePath #    Gii yii help gii #      yii help gii/model #   City    city yii gii/model --tableName=city --modelClass=City 


行動


新しい動作yii\behaviors\SluggableBehaviorを追加しました。これにより、モデルの特定の属性に、URLですぐに使用できる文字列の文字変換バージョンを追加できます。 次のように使用できます。

 use yii\behaviors\SluggableBehavior; public function behaviors() { return [ [ 'class' => SluggableBehavior::className(), 'attribute' => 'title', // 'slugAttribute' => 'alias', //    URL ( slug)   "alias" // 'ensureUnique' => true, //     slug- ], ]; } 


行動は匿名で参加できるようになりました。

 $component->attachBehaviors([ 'myBehavior1' => new MyBehavior, //   MyBehavior::className(), //   ]); 


テンプレートエンジン


SmartyおよびTwig拡張機能が大幅に改善されました。 それぞれについて、特別な構文がYiiの多くの機能に導入されました。レビューによって判断すると、通常のPHPテンプレートと同じくらい効果的にSmartyとTwigを操作できます。 新しい構文の詳細については、 マニュアル全体を参照してください。

ロシア語のドキュメント


ドキュメントの一部はロシア語に翻訳されていますが、翻訳オプションは最終的なものではなく、GitHubから直接読むことも、 自分でHTML生成 して読むこともできます 。 どうもありがとう
翻訳に直接参加したロシア語圏のコミュニティ

Source: https://habr.com/ru/post/J238447/


All Articles