Yii - Ereignis erstellen
In diesem Kapitel werden wir sehen, wie ein Ereignis in Yii erstellt wird. Um Ereignisse 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 - Im Projektstamm run ./yii migrate um die Migration auf die Datenbank anzuwenden.
Step 6 - Jetzt müssen wir ein Modell für unsere erstellen userTabelle. 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.
Erstellen Sie ein Ereignis
Angenommen, wir möchten eine E-Mail an den Administrator senden, wenn sich ein neuer Benutzer auf unserer Website registriert.
Step 1 - Ändern Sie die models/MyUser.php Datei auf diese Weise.
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "user".
*
* @property integer $id
* @property string $name
* @property string $email
*/
class MyUser extends \yii\db\ActiveRecord {
const EVENT_NEW_USER = 'new-user';
public function init() {
// first parameter is the name of the event and second is the handler.
$this->on(self::EVENT_NEW_USER, [$this, 'sendMailToAdmin']);
}
/**
* @inheritdoc
*/
public static function tableName() {
return 'user';
}
/**
* @inheritdoc
*/
public function rules() {
return [
[['name', 'email'], 'string', 'max' => 255]
];
}
/**
* @inheritdoc
*/
public function attributeLabels() {
return [
'id' => 'ID',
'name' => 'Name',
'email' => 'Email',
];
}
public function sendMailToAdmin($event) {
echo 'mail sent to admin using the event';
}
}
?>
Im obigen Code definieren wir ein "New-User" -Ereignis. Dann fügen wir in der init () -Methode das hinzusendMailToAdminFunktion zum Ereignis "Neuer Benutzer". Jetzt müssen wir dieses Ereignis auslösen.
Step 2 - Erstellen Sie eine Methode namens actionTestEvent im SiteController.
public function actionTestEvent() {
$model = new MyUser();
$model->name = "John";
$model->email = "[email protected]";
if($model->save()) {
$model->trigger(MyUser::EVENT_NEW_USER);
}
}
Im obigen Code erstellen wir einen neuen Benutzer und lösen das Ereignis "Neuer Benutzer" aus.
Step 3 - Geben Sie jetzt ein http://localhost:8080/index.php?r=site/test-eventsehen Sie folgendes.