Yii 1.1.7

先日、Yii PHPフレームワークのリリース1.1.7がリリースされました。これには、90以上の修正されたバグ、改善、および新機能が含まれています。

変更点の完全なリストはフレームワークのWebサイト入手できますが 、最もおいしいものを以下で検討します。



RESTスタイルのURLサポート



CUrlManagerを使用する場合、 を指定できます。
URLルールのverbプロパティのメソッド(GET、POST、PUTなど)。
たとえば、次のルールのGETリクエストpost/123が処理されます
post/viewアクションを使用し、 post/123PUTまたはPOSTを実行します。

 return array( 'components'=>array( 'urlManager'=>array( 'urlFormat'=>'path', 'rules'=>array( array('<controller>/view', 'pattern'=>'<controller:\w>/<id:\d+>', 'verb'=>'GET'), array('<controller>/update', 'pattern'=>'<controller:\w>/<id:\d+>', 'verb'=>'PUT, POST'), ), ), ), ); 


メソッドCHttpRequest :: getPut()およびCHttpRequest :: getDelete()を使用して、 PUTおよびDELETEデータを取得できます。

キャッシュをリクエスト



リクエストがキャッシュされると、その結果はキャッシュに保存され、リクエストが繰り返される場合はキャッシュから直接取得されます。

要求キャッシュは、DAOとARの両方に実装されています。 いくつかの例:

 //    $sql  1000      tbl_post $sql = 'SELECT * FROM tbl_post LIMIT 20'; $dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post'); $rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll(); //  ,   AR $posts = Post::model()->cache(1000, $dependency)->findAll(); // query caching with relational AR $posts = Post::model()->cache(1000, $dependency)->with('author')->findAll(); 


アクションクラスのパラメーターバインディング



バージョン1.1.4では、コントローラーアクションの自動パラメーター入力のサポートが追加されました。
このバージョンでは、機能はクラスで説明されているアクションに拡張されています。 例:

 class UpdateAction extends CAction { public function run($id) { // $id     $_GET['id'] } } 


透過的なクライアント検証



CActiveFormは、フォームの作成とその検証を大幅に促進する強力なウィジェットです。
以前は、サーバー側の検証とAJAXによる検証のみをサポートしていました。
このバージョンでは、クライアントフォースによる検証が追加されました。これはより高速に動作し、サーバーをロードしません。

クライアントに検証を実装するために、追加のコードは必要ありません。 検証
サーバー側の検証と同じ方法でモデルルールに基づいて機能します。

CActiveForm :: enableClientValidationを設定することにより、クライアントで検証を有効にできます。
true

 <?php $form=$this->beginWidget('CActiveForm', array( 'enableClientValidation'=>true, )); ?> <div class="row"> <?php echo $form->labelEx($model,'username'); ?> <?php echo $form->textField($model,'username'); ?> <?php echo $form->error($model,'username'); ?> </div> <div class="row"> <?php echo $form->labelEx($model,'password'); ?> <?php echo $form->passwordField($model,'password'); ?> <?php echo $form->error($model,'password'); ?> </div> <div class="row buttons"> <?php echo CHtml::submitButton('Login'); ?> </div> <?php $this->endWidget(); ?> 


リレーショナル名前付きパラメーターグループへのパラメーターの受け渡し



これで、名前付きリレーショナルパラメータグループにパラメータを渡すことができます。 例えば
最小レコード評価パラメーターを受け入れる評価モデルがPostモデルにある場合、
次のように、 Userモデルからこれを使用できます。

 $users=User::model()->findAll(array( 'with'=>array( 'posts'=>array( 'scopes'=>array( 'rated'=>5, ), ), ), )); 


HAS_MANYおよびHAS_ONEで「スルー」を使用する



Active Recordは、関係を構築できるthroughオプションのサポートを追加throughます。
MANY_MANYに似ていMANY_MANYが、より柔軟で、データの受信と使用を許可します
ミドルテーブルブリッジ。

たとえば、特定のグループのすべてのユーザーのすべてのコメントを取得できます。

詳細および例については、マニュアルの対応するセクションを参照してください

移行でのトランザクションの使用



移行を実行するとき、移行の一部が適用されない状況があります
そして、なんとか適用したすべてのものをロールバックする必要があります。 この問題の良い解決策は、移行全体をトランザクションでラップすることです。
もちろん、これを直接行うこともできますが、新しい機能を使用する方が便利です。

CDbMigration :: up()およびCDbMigration :: down()を実装する代わりに、
CDbMigration :: safeUp()およびCDbMigration :: safeDown()を使用できます。
その後、コードはトランザクションでラップされます。

 class m101129_185401_create_news_table extends CDbMigration { public function safeUp() { $this->createTable('tbl_news', array( 'id' => 'pk', 'title' => 'string NOT NULL', 'content' => 'text', )); } public function safeDown() { $this->dropTable('tbl_news'); } } 


すべてのDBMSがトランザクションをサポートしているわけではないことに注意してください。

スクリプトパッケージを登録して使用する



CClientScriptでは、スクリプトパッケージを登録して使用できるようになりました。
以前は、この機会は内部目的のみに使用されていました。

パッケージには、CSS、JavaScript、画像、およびその他のファイルを含めることができます
ユーザーに表示する必要があります。 パッケージは他のパッケージに依存する場合があります。 それは
パッケージを登録すると、そのパッケージが依存するすべてのパッケージが自動的に登録されます。

次のようにパッケージを操作します:最初の
CClientScript :: packagesは必要なパッケージを説明し、その後
CClientScript :: registerPackage()を使用して登録されます。

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


All Articles