Yii - Sử dụng các hành động
Để tạo một hành động trong một lớp bộ điều khiển, bạn nên xác định một phương thức công khai có tên bắt đầu bằng hành động từ. Dữ liệu trả về của một hành động đại diện cho phản hồi được gửi đến người dùng cuối.
Step 1 - Hãy để chúng tôi xác định hành động hello-world trong 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 - Loại http://localhost:8080/index.php?r=example/hello-worldtrong thanh địa chỉ của trình duyệt web. Bạn sẽ thấy như sau.
ID hành động thường là các động từ, chẳng hạn như tạo, cập nhật, xóa, v.v. Điều này là do các hành động thường được thiết kế để thực hiện một thay đổi cụ thể nếu một tài nguyên.
ID hành động chỉ được chứa những ký tự này - chữ cái tiếng Anh viết thường, chữ số, dấu gạch ngang và dấu gạch dưới.
Có hai loại hành động: nội tuyến và độc lập.
Các hành động nội tuyến được định nghĩa trong lớp bộ điều khiển. Tên của các hành động được lấy từ các ID hành động theo cách này -
- Chuyển chữ cái đầu tiên trong tất cả các từ của ID hành động thành chữ hoa.
- Bỏ dấu gạch nối.
- Thêm tiền tố hành động.
Examples -
- chỉ mục trở thành actionIndex.
- hello-world (như trong ví dụ trên) trở thành actionHelloWorld.
Nếu bạn định sử dụng lại cùng một hành động ở những nơi khác nhau, bạn nên xác định nó là một hành động độc lập.
Tạo một lớp hành động độc lập
Để tạo một lớp hành động độc lập, bạn nên mở rộng yii \ base \ Action hoặc một lớp con và triển khai run() phương pháp.
Step 1- Tạo một thư mục thành phần bên trong gốc dự án của bạn. Bên trong thư mục đó, tạo một tệp có tênGreetingAction.php với đoạn mã sau.
<?php
namespace app\components;
use yii\base\Action;
class GreetingAction extends Action {
public function run() {
return "Greeting";
}
}
?>
Chúng tôi vừa tạo một hành động có thể tái sử dụng. Để sử dụng nó trongExampleController, chúng ta nên khai báo hành động của mình trong bản đồ hành động bằng cách ghi đè phương thức hành động ().
Step 2 - Sửa đổi ExampleController.php nộp hồ sơ theo cách này.
<?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!";
}
}
?>
Các actions() phương thức trả về một mảng có giá trị là tên lớp và khóa là ID hành động.
Step 3 - Đi tới http://localhost:8080/index.php?r=example/greeting. Bạn sẽ thấy kết quả sau.
Step 4- Bạn cũng có thể sử dụng các hành động để chuyển hướng người dùng đến các URL khác. Thêm hành động sau vàoExampleController.php.
public function actionOpenGoogle() {
// redirect the user browser to http://google.com
return $this->redirect('http://google.com');
}
Bây giờ, nếu bạn mở http://localhost:8080/index.php?r=example/open-google, bạn sẽ được chuyển hướng đến http://google.com.
Các phương thức hành động có thể nhận tham số, được gọi là tham số hành động . Giá trị của chúng được lấy từ$_GET sử dụng tên tham số làm khóa.
Step 5 - Thêm hành động sau vào bộ điều khiển mẫu của chúng tôi.
public function actionTestParams($first, $second) {
return "$first $second";
}
Step 6 - Nhập URL http://localhost:8080/index.php?r=example/testparams&first=hello&second=world trong thanh địa chỉ của trình duyệt web, bạn sẽ thấy kết quả sau.
Mỗi bộ điều khiển có một hành động mặc định. Khi một tuyến đường chỉ chứa ID bộ điều khiển, điều đó có nghĩa là hành động mặc định được yêu cầu. Theo mặc định, hành động làindex. Bạn có thể dễ dàng ghi đè thuộc tính này trong bộ điều khiển.
Step 7 - Sửa đổi của chúng tôi ExampleController cách này.
<?php
namespace app\controllers;
use yii\web\Controller;
class ExampleController extends Controller {
public $defaultAction = "hello-world";
/* other actions */
}
?>
Step 8 - Bây giờ, nếu bạn đi đến http://localhost:8080/index.php?r=example, bạn sẽ thấy như sau.
Để thực hiện yêu cầu, bộ điều khiển sẽ trải qua vòng đời sau:
Yii \ base \ Controller:init() phương thức được gọi.
Bộ điều khiển tạo một hành động dựa trên ID hành động.
Bộ điều khiển tuần tự gọi beforeAction() phương pháp của ứng dụng web, mô-đun và bộ điều khiển.
Bộ điều khiển chạy hành động.
Bộ điều khiển tuần tự gọi afterAction() phương pháp của ứng dụng web, mô-đun và bộ điều khiển.
Ứng dụng chỉ định kết quả hành động cho phản hồi.
Điểm quan trọng
Bộ điều khiển nên -
- Hãy rất mỏng. Mỗi hành động chỉ nên chứa một vài dòng mã.
- Sử dụng Chế độ xem để trả lời.
- Không nhúng HTML.
- Truy cập dữ liệu yêu cầu.
- Phương thức gọi của các mô hình.
- Không xử lý dữ liệu yêu cầu. Chúng nên được xử lý trong mô hình.