Yii - Verhalten
Verhalten sind Instanzen der Klasse yii \ base \ Behavior. Ein Verhalten fügt seine Methoden und Eigenschaften in die Komponente ein, an die es angehängt ist. Verhalten kann auch auf Ereignisse reagieren, die von der Komponente ausgelöst werden.
Step 1 - Um ein Verhalten zu definieren, erweitern Sie die yii\base\Behavior Klasse.
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() {
// ...
}
}
Der obige Code definiert das Verhalten mit einer Eigenschaft (prop1) und einer Methode (myFunction). Wenn dieses Verhalten an eine Komponente angehängt wird, hat diese Komponente auch dieprop1 Eigentum und die myFunction Methode.
Um auf die Komponente zuzugreifen, an die das Verhalten angehängt ist, können Sie die verwenden yii\base\Behavior::$owner property.
Step 2 - Wenn ein Verhalten auf die Komponentenereignisse reagieren soll, sollten Sie das überschreiben yii\base\Behavior::events() Methode.
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 - Um ein Verhalten anzuhängen, sollten Sie das überschreiben behaviors() Methode der Komponentenklasse.
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 - Um ein Verhalten zu lösen, rufen Sie an the yii\base\Component::detachBehavior() Methode.
$component->detachBehavior('myBehavior');
Um Verhaltensweisen in Aktion zu zeigen, benötigen wir Daten.
DB vorbereiten
Step 1- Erstellen Sie eine neue Datenbank. Die Datenbank kann auf zwei Arten vorbereitet werden.
Führen Sie im Terminal mysql -u root –p aus .
Erstellen Sie eine neue Datenbank über CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci;
Step 2 - Konfigurieren Sie die Datenbankverbindung in der config/db.phpDatei. Die folgende Konfiguration gilt für das derzeit verwendete System.
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host = localhost;dbname = helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];
?>
Step 3 - Im Stammordner run ./yii migrate/create test_table. Dieser Befehl erstellt eine Datenbankmigration zur Verwaltung unserer Datenbank. Die Migrationsdatei sollte in der angezeigt werdenmigrations Ordner des Projektstamms.
Step 4 - Ändern Sie die Migrationsdatei (m160106_163154_test_table.php in diesem Fall) auf diese Weise.
<?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');
}
}
?>
Die obige Migration erstellt eine userTabelle mit diesen Feldern: ID, Name und E-Mail. Es werden auch einige Demo-Benutzer hinzugefügt.
Step 5 - Innerhalb des Projektstamms run./yii migrate um die Migration auf die Datenbank anzuwenden.
Step 6 - Jetzt müssen wir ein Modell für unsere erstellen user table. Der Einfachheit halber werden wir das verwendenGiiTool zur Codegenerierung. Öffne dasurl: http://localhost:8080/index.php?r=gii. Klicken Sie dann auf die Schaltfläche "Start" unter der Überschrift "Modellgenerator". Geben Sie den Tabellennamen ("Benutzer") und die Modellklasse ("MyUser") ein, klicken Sie auf die Schaltfläche "Vorschau" und schließlich auf die Schaltfläche "Generieren".
Das MyUser-Modell sollte im Modellverzeichnis angezeigt werden.