Yii - Comportements
Les comportements sont des instances de la classe yii \ base \ Behavior. Un comportement injecte ses méthodes et propriétés dans le composant auquel il est attaché. Les comportements peuvent également répondre aux événements déclenchés par le composant.
Step 1 - Pour définir un comportement, étendez le yii\base\Behavior classe.
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() {
// ...
}
}
Le code ci-dessus définit le comportement avec une propriété (prop1) et une méthode (myFunction). Lorsque ce comportement est associé à un composant, ce composant aura également leprop1 propriété et le myFunction méthode.
Pour accéder au composant auquel le comportement est associé, vous pouvez utiliser le yii\base\Behavior::$owner property.
Step 2 - Si vous souhaitez qu'un comportement réponde aux événements du composant, vous devez remplacer le yii\base\Behavior::events() méthode.
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 - Pour attacher un comportement, vous devez remplacer le behaviors() méthode de la classe de composant.
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 - Pour détacher un comportement, appelez the yii\base\Component::detachBehavior() méthode.
$component->detachBehavior('myBehavior');
Pour montrer les comportements en action, nous avons besoin de données.
Préparation de la base de données
Step 1- Créez une nouvelle base de données. La base de données peut être préparée des deux manières suivantes.
Dans le terminal, exécutez mysql -u root –p .
Créez une nouvelle base de données via CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci;
Step 2 - Configurer la connexion à la base de données dans le config/db.phpfichier. La configuration suivante correspond au système actuellement utilisé.
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host = localhost;dbname = helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];
?>
Step 3 - Dans le dossier racine run ./yii migrate/create test_table. Cette commande créera une migration de base de données pour gérer notre base de données. Le fichier de migration doit apparaître dans lemigrations dossier de la racine du projet.
Step 4 - Modifier le fichier de migration (m160106_163154_test_table.php dans ce cas) de cette façon.
<?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');
}
}
?>
La migration ci-dessus crée un usertable avec ces champs: id, nom et e-mail. Il ajoute également quelques utilisateurs de démonstration.
Step 5 −À l'intérieur de la racine du projet run./yii migrate pour appliquer la migration à la base de données.
Step 6 - Maintenant, nous devons créer un modèle pour notre user table. Par souci de simplicité, nous allons utiliser leGiioutil de génération de code. Ouvrez ceciurl: http://localhost:8080/index.php?r=gii. Ensuite, cliquez sur le bouton «Démarrer» sous l'en-tête «Générateur de modèle». Remplissez le nom de la table («utilisateur») et la classe de modèle («Mon utilisateur»), cliquez sur le bouton «Aperçu» et enfin, cliquez sur le bouton «Générer».
![](https://post.nghiatu.com/assets/tutorial/yii/images/create_model.jpg)
Le modèle MyUser doit apparaître dans le répertoire des modèles.