Yii - ईवेंट बनाना

इस अध्याय में हम Yii में एक घटना बनाने के लिए देखेंगे। कार्रवाई में घटनाओं को दिखाने के लिए, हमें डेटा की आवश्यकता है।

डीबी की तैयारी

Step 1- एक नया डेटाबेस बनाएँ। डेटाबेस को निम्नलिखित दो तरीकों से तैयार किया जा सकता है।

  • टर्मिनल में mysql -u root -p चलाएं

  • CREAT DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci के माध्यम से एक नया डेटाबेस बनाएं ;

Step 2 - में डेटाबेस कनेक्शन को कॉन्फ़िगर करें config/db.phpफ़ाइल। वर्तमान में उपयोग किए गए सिस्टम के लिए निम्न कॉन्फ़िगरेशन है।

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

Step 3 - रूट फोल्डर के अंदर run ./yii migrate/create test_table। यह कमांड हमारे DB को प्रबंधित करने के लिए एक डेटाबेस माइग्रेशन बनाएगी। माइग्रेशन फ़ाइल में दिखाई देना चाहिएmigrations प्रोजेक्ट रूट का फ़ोल्डर।

Step 4 - माइग्रेशन फ़ाइल संशोधित करें (m160106_163154_test_table.php इस मामले में) इस तरह से।

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

उपरोक्त प्रवासन एक बनाता है userइन फ़ील्ड्स के साथ तालिका: आईडी, नाम और ईमेल। यह कुछ डेमो उपयोगकर्ताओं को भी जोड़ता है।

Step 5 - प्रोजेक्ट रूट के अंदर run ./yii migrate डेटाबेस में माइग्रेशन लागू करने के लिए।

Step 6 - अब, हमें अपने लिए एक मॉडल बनाने की आवश्यकता है userतालिका। सादगी के लिए, हम उपयोग करने जा रहे हैंGiiकोड जनरेशन टूल। इसे खोलोurl: http://localhost:8080/index.php?r=gii। फिर, "मॉडल जनरेटर" हेडर के तहत "प्रारंभ" बटन पर क्लिक करें। तालिका नाम ("उपयोगकर्ता") और मॉडल वर्ग ("MyUser") भरें, "पूर्वावलोकन" बटन पर क्लिक करें और अंत में, "जनरेट" बटन पर क्लिक करें।

MyUser मॉडल को मॉडल निर्देशिका में दिखाई देना चाहिए।

एक घटना बनाएँ

जब भी कोई नया उपयोगकर्ता हमारी वेब साइट पर पंजीकरण करता है, तो हम एडमिन को एक ईमेल भेजना चाहते हैं।

Step 1 - संशोधित करें models/MyUser.php इस तरह से फाइल करें।

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

उपरोक्त कोड में, हम "नए उपयोगकर्ता" ईवेंट को परिभाषित करते हैं। फिर, init () विधि से हम संलग्न करते हैंsendMailToAdmin"नए उपयोगकर्ता" घटना के लिए कार्य करते हैं। अब, हमें इस ईवेंट को ट्रिगर करने की आवश्यकता है।

Step 2 - नामक विधि बनाएँ actionTestEvent SiteController में।

public function actionTestEvent() {
   $model = new MyUser();
   $model->name = "John"; $model->email = "[email protected]";
   if($model->save()) { $model->trigger(MyUser::EVENT_NEW_USER);
   }
}

उपरोक्त कोड में, हम एक नया उपयोगकर्ता बनाते हैं और "नया उपयोगकर्ता" ईवेंट ट्रिगर करते हैं।

Step 3 - अब टाइप करें http://localhost:8080/index.php?r=site/test-event, आप निम्नलिखित देखेंगे।