Yii - Perilaku

Perilaku adalah turunan dari kelas yii \ base \ Behavior. Sebuah behavior memasukkan metode dan propertinya ke komponen yang dilampirkan. Perilaku juga dapat merespons peristiwa yang dipicu oleh komponen.

Step 1 - Untuk mendefinisikan suatu perilaku, luaskan yii\base\Behavior kelas.

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() {
      // ...
   }
}

Kode di atas mendefinisikan perilaku dengan satu properti (prop1) dan satu metode (myFunction). Jika perilaku ini dilampirkan ke sebuah komponen, komponen itu juga akan memilikiprop1 properti dan myFunction metode.

Untuk mengakses komponen tempat perilaku dilampirkan, Anda dapat menggunakan yii\base\Behavior::$owner property.

Step 2 - Jika Anda ingin suatu perilaku merespons kejadian komponen, Anda harus mengganti yii\base\Behavior::events() metode.

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 - Untuk melampirkan perilaku, Anda harus mengganti behaviors() metode kelas komponen.

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 - Untuk melepaskan suatu perilaku, panggil the yii\base\Component::detachBehavior() metode.

$component->detachBehavior('myBehavior');

Untuk menunjukkan perilaku dalam tindakan, kita membutuhkan data.

Mempersiapkan DB

Step 1- Buat database baru. Basis data dapat disiapkan dengan dua cara berikut.

  • Di terminal, jalankan mysql -u root –p .

  • Buat database baru melalui CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci;

Step 2 - Konfigurasi koneksi database di config/db.phpmengajukan. Konfigurasi berikut adalah untuk sistem yang digunakan saat ini.

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

Step 3 - Di dalam folder root run ./yii migrate/create test_table. Perintah ini akan membuat migrasi database untuk mengelola DB kita. File migrasi akan muncul dimigrations folder dari root proyek.

Step 4 - Ubah file migrasi (m160106_163154_test_table.php dalam kasus ini) dengan cara ini.

<?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');
      }
   }
?>

Migrasi di atas menciptakan usertabel dengan bidang ini: id, nama, dan email. Itu juga menambahkan beberapa pengguna demo.

Step 5 −Di dalam akar proyek run./yii migrate untuk menerapkan migrasi ke database.

Step 6 - Sekarang, kita perlu membuat model untuk file user table. Demi kesederhanaan, kami akan menggunakan fileGiialat pembuat kode. Buka iniurl: http://localhost:8080/index.php?r=gii. Kemudian, klik tombol "Start" di bawah header "Model generator". Isi Nama Tabel (“user”) dan Model Class (“MyUser”), klik tombol “Preview” dan terakhir, klik tombol “Generate”.

Model MyUser akan muncul di direktori model.