Yii - Hành vi

Behaviors là những thể hiện của lớp yii \ base \ Behavior. Một hành vi đưa các phương thức và thuộc tính của nó vào thành phần mà nó được gắn vào. Các hành vi cũng có thể phản ứng với các sự kiện được kích hoạt bởi thành phần.

Step 1 - Để xác định một hành vi, hãy mở rộng yii\base\Behavior lớp học.

namespace app\components;
use yii\base\Behavior;
class MyBehavior extends Behavior {
   private $_prop1; public function getProp1() { return $this->_prop1;
   }
   public function setProp1($value) { $this->_prop1 = $value;
   }
   public function myFunction() {
      // ...
   }
}

Đoạn mã trên xác định hành vi với một thuộc tính (prop1) và một phương thức (myFunction). Khi hành vi này được gắn vào một thành phần, thành phần đó cũng sẽ cóprop1 tài sản và myFunction phương pháp.

Để truy cập vào thành phần mà hành vi được đính kèm, bạn có thể sử dụng yii\base\Behavior::$owner property.

Step 2 - Nếu bạn muốn một hành vi phản hồi các sự kiện thành phần, bạn nên ghi đè yii\base\Behavior::events() phương pháp.

namespace app\components;
use yii\db\ActiveRecord;
use yii\base\Behavior;
class MyBehavior extends Behavior {
   public function events() {
      return [
         ActiveRecord::EVENT_AFTER_VALIDATE => 'afterValidate',
      ];
   }
   public function afterValidate($event) {
      // ...
   }
}

Step 3 - Để đính kèm một hành vi, bạn nên ghi đè behaviors() phương thức của lớp thành phần.

namespace app\models;
use yii\db\ActiveRecord;
use app\components\MyBehavior;
class MyUser extends ActiveRecord {
   public function behaviors() {
      return [
         // anonymous behavior, behavior class name only
         MyBehavior::className(),
         // named behavior, behavior class name only
         'myBehavior2' => MyBehavior::className(),
         // anonymous behavior, configuration array
         [
            'class' => MyBehavior::className(),
            'prop1' => 'value1',
            'prop2' => 'value2',
            'prop3' => 'value3',
         ],
         // named behavior, configuration array
         'myBehavior4' => [
            'class' => MyBehavior::className(),
            'prop1' => 'value1'
         ]
      ];
   }
}

Step 4 - Để loại bỏ một hành vi, hãy gọi the yii\base\Component::detachBehavior() phương pháp.

$component->detachBehavior('myBehavior');

Để hiển thị các hành vi trong hành động, chúng ta cần dữ liệu.

Chuẩn bị DB

Step 1- Tạo cơ sở dữ liệu mới. Cơ sở dữ liệu có thể được chuẩn bị theo hai cách sau.

  • Trong terminal chạy mysql -u root –p .

  • Tạo cơ sở dữ liệu mới thông qua CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci;

Step 2 - Định cấu hình kết nối cơ sở dữ liệu trong config/db.phptập tin. Cấu hình sau đây dành cho hệ thống được sử dụng hiện tại.

<?php
   return [
      'class' => 'yii\db\Connection',
      'dsn' => 'mysql:host = localhost;dbname = helloworld',
      'username' => 'vladimir',
      'password' => '12345',
      'charset' => 'utf8',
   ];
?>

Step 3 - Bên trong thư mục gốc run ./yii migrate/create test_table. Lệnh này sẽ tạo sự di chuyển cơ sở dữ liệu để quản lý DB của chúng tôi. Tệp di chuyển sẽ xuất hiện trongmigrations thư mục gốc của dự án.

Step 4 - Sửa đổi tệp di chuyển (m160106_163154_test_table.php trong trường hợp này) theo cách này.

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160106_163154_test_table extends Migration {
      public function safeUp() {
         $this->createTable("user", [ "id" => Schema::TYPE_PK, "name" => Schema::TYPE_STRING, "email" => Schema::TYPE_STRING, ]); $this->batchInsert("user", ["name", "email"], [
            ["User1", "[email protected]"],
            ["User2", "[email protected]"],
            ["User3", "[email protected]"],
            ["User4", "[email protected]"],
            ["User5", "[email protected]"],
            ["User6", "[email protected]"],
            ["User7", "[email protected]"],
            ["User8", "[email protected]"],
            ["User9", "[email protected]"],
            ["User10", "[email protected]"],
            ["User11", "[email protected]"],
         ]);
      }
      public function safeDown() {
         $this->dropTable('user');
      }
   }
?>

Việc di chuyển trên tạo ra một userbảng với các trường sau: id, tên và email. Nó cũng thêm một vài người dùng demo.

Step 5 −Bên trong thư mục gốc của dự án run./yii migrate để áp dụng di chuyển vào cơ sở dữ liệu.

Step 6 - Bây giờ, chúng ta cần tạo một mô hình cho user table. Để đơn giản, chúng tôi sẽ sử dụngGiicông cụ tạo mã. Mở cái này raurl: http://localhost:8080/index.php?r=gii. Sau đó, nhấp vào nút “Bắt đầu” trong tiêu đề “Trình tạo mô hình”. Điền vào Tên bảng (“người dùng”) và Lớp mẫu (“Người dùng của tôi”), nhấp vào nút “Xem trước” và cuối cùng, nhấp vào nút “Tạo”.

Mô hình MyUser sẽ xuất hiện trong thư mục mô hình.