Yii - Menggunakan Actions

Untuk membuat tindakan di kelas pengontrol, Anda harus mendefinisikan metode publik yang namanya dimulai dengan kata tindakan. Data yang dikembalikan dari suatu tindakan mewakili respons yang akan dikirim ke pengguna akhir.

Step 1 - Mari kita tentukan aksi hello-world di file ExampleController.

<?php 
   namespace app\controllers; 
   use yii\web\Controller; 
   class ExampleController extends Controller { 
      public function actionIndex() { 
         $message = "index action of the ExampleController"; return $this->render("example",[ 
            'message' => $message 
         ]); 
      } 
      public function actionHelloWorld() { 
         return "Hello world!"; 
      } 
   } 
?>

Step 2 - Ketik http://localhost:8080/index.php?r=example/hello-worlddi bilah alamat browser web. Anda akan melihat yang berikut ini.

ID tindakan biasanya berupa kata kerja, seperti buat, perbarui, hapus, dan sebagainya. Ini karena tindakan sering dirancang untuk melakukan perubahan tertentu sebagai sumber daya.

ID Tindakan hanya boleh berisi karakter ini - huruf bahasa Inggris dalam huruf kecil, angka, tanda hubung, dan garis bawah.

Ada dua jenis tindakan: sebaris dan mandiri.

Tindakan sebaris ditentukan di kelas pengontrol. Nama tindakan berasal dari ID tindakan dengan cara ini -

  • Ubah huruf pertama dari semua kata ID tindakan menjadi huruf besar.
  • Hapus tanda hubung.
  • Tambahkan awalan tindakan.

Examples -

  • index menjadi actionIndex.
  • hello-world (seperti pada contoh di atas) menjadi actionHelloWorld.

Jika Anda berencana untuk menggunakan kembali tindakan yang sama di tempat berbeda, Anda harus mendefinisikannya sebagai tindakan mandiri.

Buat Kelas Aksi Mandiri

Untuk membuat kelas aksi mandiri, Anda harus memperluas yii \ base \ Action atau kelas anak, dan mengimplementasikan a run() metode.

Step 1- Buat folder komponen di dalam root proyek Anda. Di dalam folder itu buat file bernamaGreetingAction.php dengan kode berikut.

<?php 
   namespace app\components;
   use yii\base\Action;
   class GreetingAction extends Action {
      public function run() {
         return "Greeting";
      }
   }
?>

Kami baru saja membuat tindakan yang dapat digunakan kembali. Untuk menggunakannya diExampleController, kita harus mendeklarasikan tindakan kita di peta tindakan dengan mengganti metode tindakan ().

Step 2 - Ubah ExampleController.php mengajukan dengan cara ini.

<?php
   namespace app\controllers;
   use yii\web\Controller;
   class ExampleController extends Controller {
      public function actions() {
         return [
            'greeting' => 'app\components\GreetingAction',
         ];
      }
      public function actionIndex() {
         $message = "index action of the ExampleController";
         
         return $this->render("example",[ 'message' => $message
         ]);
      }
      public function actionHelloWorld() {
         return "Hello world!";
      }
   }
?>

Itu actions() metode mengembalikan array yang nilainya adalah nama kelas dan kunci adalah ID tindakan.

Step 3 - Pergi ke http://localhost:8080/index.php?r=example/greeting. Anda akan melihat output berikut.

Step 4- Anda juga dapat menggunakan tindakan untuk mengarahkan pengguna ke URL lain. Tambahkan tindakan berikut keExampleController.php.

public function actionOpenGoogle() {
   // redirect the user browser to http://google.com
   return $this->redirect('http://google.com');
}

Sekarang, jika Anda membuka http://localhost:8080/index.php?r=example/open-google, Anda akan dialihkan ke http://google.com.

Metode tindakan dapat mengambil parameter, yang disebut parameter tindakan . Nilainya diambil dari$_GET menggunakan nama parameter sebagai kuncinya.

Step 5 - Tambahkan tindakan berikut ke pengontrol contoh kami.

public function actionTestParams($first, $second) {
   return "$first $second";
}

Step 6 - Ketik URL http://localhost:8080/index.php?r=example/testparams&first=hello&second=world di address bar browser web Anda, Anda akan melihat output berikut.

Setiap pengontrol memiliki tindakan default. Ketika sebuah rute hanya berisi ID pengontrol, itu berarti tindakan default diminta. Secara default, tindakannya adalahindex. Anda dapat dengan mudah mengganti properti ini di pengontrol.

Step 7 - Modifikasi kami ExampleController cara ini.

<?php
   namespace app\controllers;
   use yii\web\Controller;
   class ExampleController extends Controller {
      public $defaultAction = "hello-world";
      /* other actions */
   }
?>

Step 8 - Sekarang, jika kamu pergi http://localhost:8080/index.php?r=example, Anda akan melihat yang berikut ini.

Untuk memenuhi permintaan tersebut, pengontrol akan menjalani siklus hidup berikut -

  • Kontroler yii \ base \:init() metode disebut.

  • Pengontrol membuat tindakan berdasarkan ID tindakan.

  • Pengontrol secara berurutan memanggil beforeAction() metode aplikasi web, modul, dan pengontrol.

  • Pengontrol menjalankan aksinya.

  • Pengontrol secara berurutan memanggil afterAction() metode aplikasi web, modul, dan pengontrol.

  • Aplikasi memberikan hasil tindakan ke respons.

Poin Penting

Pengendali harus -

  • Menjadi sangat kurus. Setiap tindakan hanya boleh berisi beberapa baris kode.
  • Gunakan Tampilan untuk tanggapan.
  • Tidak menyematkan HTML.
  • Akses data permintaan.
  • Metode panggilan model.
  • Tidak memproses data permintaan. Ini harus diproses dalam model.