Yii2。 知人

はじめに

先日、イベントが起こりました。それはもっと多くの人が待っていたと思います。 Yii Frameworkの作者はプレビュー版を公開しました。



1日後、トレーニング資料がハブに登場し、その読書が奇妙な印象を与え、週末がYii2コードの研究に費やした後、私は自分のバージョンを書くことにしました。 悪くならないことを願っています。



開始する

2番目のバージョンは、最初のバージョンとは根本的に異なります。 短いリスト:



-コアをアドオンから分離しました。 多くのクラスを捨てました。 それらのいくつかは、公式にサポートされている別個の拡張機能に移行します。 部品は、単に不必要に削除されました。



-ベースCComponentは ObjectComponent 分割されました。 1つ目はゲッターとセッターの作業を実行し、2つ目は1つ目を拡張し、イベントと動作を追加します。



-イベントと動作の接続が変更されました。 イベントを購読する
$post->on('update', function($event) { // send email notification });
      
      





コンポーネントを構成する
 $component = \Yii::createObject(array( 'class' => '\app\components\GoogleMap', 'apiKey' => 'xyz', //   'on eventName' => array('Event', 'run'), //   'as behaviorName' => array(/* Behavior config */), ));
      
      





-新しいViewクラスが追加され、実際のMVCフレームワークができました。 提出
 <?php use yii\helpers\base\Html; /** *   $this      . *     $this->context * @var yii\base\View $this */ $this->title = 'Hello world'; ?> <h1><?php echo Html::encode($this->title); ?></h1> <p class="lead"> !</p>
      
      



*ビューは各コントローラーにインストールするか、アプリケーションのベースを使用できます。



-コントローラーのrender()は、他に何も表示しません。 データを返します
 public function actionIndex() { echo $this->render('index'); }
      
      





-2つのイベントがコントローラーに表示され、サブスクライブできます: beforeActionafterAction
 public function init() { $this->on('beforeAction', function($event) { //   $event->isValid = false; }); }
      
      





-CFilterコントローラーフィルターが削除され 、すべてが動作を介して実行される
 public function behaviors() { return array( 'AccessControl' => array( 'class' => '\yii\web\AccessControl', 'rules' =>array(/*     */), ), ); }
      
      





-コントローラーに素晴らしいヘルパーが登場しました-populateメソッド
 public function actionLogin() { $model = new LoginForm(); if ($this->populate($_POST, $model) && $model->login()) { Yii::$app->response->redirect(array('site/index')); } echo $this->render('login', array( 'model' => $model, )); }
      
      





-いくつかの静的ヘルパークラスを追加: ArrayHelperStringHelperSecurityHelper 。 LSBを介してすべてのヘルパーをブロックできるようになりました。 個人的に私はHtmlを複数回シャットダウンしなければならなかったので、私は叫んだ。



-ActiveFormウィジェットも書き直されており、CForm フォームビルダーを置き換える可能性があります。 各フォームフィールドは、 ActiveFormを作成するActiveFieldオブジェクトとして表すことができるようになりました
 $form = $this->beginWidget('yii\widgets\ActiveForm', array( 'options' => array('class' => 'form-horizontal') )); echo $form->field($model, 'username')->textInput(); echo $form->field($model, 'password')->passwordInput(); echo $form->field($model, 'rememberMe')->checkbox(); echo Html::tag('div', Html::submitButton('Login', null, null, array('class' => 'btn btn-primary')), array( 'class' => 'form-actions' )); $this->endWidget();
      
      



* 注意:Html ::タグ($タグ、$コンテンツ、$オプション)で-パラメーターの順序を変更しました!



アクティブレコード

「ほとんどの場合、ActiveRecordは変更されていません。」
-前の記事に書かれています。 真に気づいた-触れなかった。

彼らはまったく異なるActiveRecordを取得して作成しました。



- モデルを忘れる()



-CDbCriteriaを削除しました 。 しかし、心配する必要はありません。ベースでの作業がこれで簡単になりました。 CActiveFinderCDbCriteriaのハイブリッドであるActiveQueryが登場しました
 //   ActiveQuery $query = Post::find(); //   $posts = $query->all(); //      $posts = $query ->where(array('status' => Post::DRAFT)) ->orderBy('time') ->all(); //    $post = $query ->where(array('id' => 10, 'status' => Post::READ)) ->one(); //  ,  where       $post = Post::find(array('id' => 10, 'status' => Post::READ)); //              $post = Post::find(10) ->where(array('status' => Post::READ)) ->one(); //      $posts = $query->indexBy('title')->all(); //     $posts = $query->asArray()->all();
      
      





-すべての一般的なメソッドが静的になりました: getDbtableNamefind *、 saveAll *、 primaryKey 。 ゲインは明らかです。



-コミュニケーション、それらなしで。 リンクはゲッターを追加することで定義されるようになりました
 class Post extends ActiveRecord { public function getCreator() { return $this->hasOne('User', array('id' => 'user_id')); } public function getComments() { return $this->hasMany('Comment', array('post_id' => 'id')); } public function getTrustComments($isTrust = true) { return $this->hasMany('Comment', array('post_id' => 'id')) ->where('status = :status', array( ':status' => $isTrust ? self::TRUST : self::UNTRUST, )) ->orderBy('id'); } }
      
      





-リンクの操作の便宜上、 リンク ()およびリンク解除 ()を追加しました。これらは自動的にキーを配置します
 $post = Post::find(1); $comment = new Comment(); $comment->text = 'Yii Framework is cool!'; $post->link('comments', $comment);
      
      





-条件の名前付きグループがありますが、形式は異なります。 CDbCriteriaはもうありません。 つまり 、条件配列ももうありません。 これらはメソッドであり、静的なものであり、 クエリに条件を追加します
 class Post extends \yii\db\ActiveRecord { /** * @param ActiveQuery $query */ public static function byCreator($query, $userId) { $query->andWhere('user_id = :userId', array('userId' => $userId)); } /** * @param ActiveQuery $query */ public static function removed($query) { $query->andWhere('removed = 1'); } } $posts = Post::find()->removed()->all(); $myPosts = Post::find()->byCreator(Yii::$app->user->id)->all();
      
      







全部

これに終止符を打ちます。 この記事は大きなものであり、多くのコードであることが判明しましたが、生き残って読んでいただければ幸いです。



コミュニケーションの前に。



All Articles