Thứ Năm, 29 tháng 9, 2016

Yii2 phần 3 - Thao tác với controller trong yii2 framework

Phần trước ta đã tiến hành cấu hình url cho frontend và backend xong rồi, bài này ta sẽ tiến hành tạo và chạy controller đầu tiên trong ứng dụng web yii2 framework
Cũng như các framework khác, yii2 cũng chia làm 3 mục controllers, models, views. Controller nhận request từ người dùng sau đó xử lý, lấy dữ liệu từ database lên thông qua models, sau đó kết quả đổ ra views cho người dùng.

Tạo controller trong yii2 framework
Mô hình MVC trong Yii2 framework

Trong Yii2 có một phần giúp ta có thể tạo controllers, models, views... hay mạnh hơn là nó có thể tạo ra một CRUD hoành chỉnh có đầy đủ chức năng list, add, edit và delete đó là Gii. Phần này tôi sẽ hướng dẫn các bạn vào một bài sau chi tiết hơn, ở đây ta sẽ thao tác tạo file đơn giản

1. Tạo file frontend\controllers\HelloController.php, Yii2 quy định tên controller chữ đầu tiên sẽ viết hoa và kèm theo từ Controller, từ Controller cũng phải viết hoa chữ C.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
namespace frontend\controllers;
 
use Yii;
use yii\web\Controller;
 
Class HelloController extends Controller
{
    public function actionIndex()
    {
        Yii::$app->view->title = 'Yii2 Framework - Hello world';
         
        return $this->render('index', ['hello' => 'Yii2 Franework - Hello world']);
    }
}

Trong đó
  • Yii2 sử dụng namespace, nôm na là cứ ở thư mục nào ta dùng namespace đúng đường dẫn đến thư mục đó
  • Khái niệm use cũng giống như include file
  • Tên class phải viết giống như tên file
  • Các class ta viết ra được kế thừa từ class Controller của yii2
  • Một acction trong Yii2 được bắt đầu từ action sau đó là tên action, chữ cái đầu viết hoa, ở đây ta đang có actionIndex()


- Truyền title xuống view ta sử dụng cú pháp
1
Yii::$app->view->title = 'Tiêu đề';

- Gọi view trong controller ta sử dụng cú pháp sau
1
return $this->render('index'); //nhập đường dẫn file view muốn gọi


Cũng như các framework khác, Yii2 sử dụng mảng để truyền giá trị từ controller xuống view, ở phiên bản php 5.4 trở lên ta sẽ gặp khái niệm mảng là [] (hai dấu ngoặc vuông).

Ở trên ta đang truyền một biến hello có giá trị là 'Yii2 Franework - Hello world' xuống view
1
return $this->render('index',['hello' => 'Yii2 Franework - Hello world']);


2. Tạo file frontend\views\hello\index.php để hiển thị kết quả từ controller, Ở đây controller của chúng ta là Hello nên trong folder Views chúng ta sẽ có folder hello tương ứng với controller nhé.

Trong file frontend\views\hello\index.php ta sẽ nhận giá trị biến truyền từ controller xuống, echo kết quả
1
<h3><?= $hello ?></h3>

Sau khi tạo xong, ta tiến hành chạy controller bằng url sau
1
http://yiiadvanced/?r=hello

Nếu như lúc đầu ta có thể chạy controller bằng http://localhost/yii2adv/frontend/web/hello thì sau khi ta cấu hình loại bỏ fronted/web và backend/web sẽ không chạy được bằng url này nữa. Để chạy được theo Url dạng này
1
http://yiiadvanced/hello

Thì ta cần cấu hình trong file frontend\config\main.php một chút, ta thêm vào components nội dung sau

- Thêm baseUrl
1
2
3
'request' => [
            'baseUrl' => '/',
        ],

- Thêm urlManager, cho showScriptName = false
1
2
3
4
5
6
'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ],

Sau khi thêm nó sẽ như vậy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
'components' => [
        'request' => [
            'baseUrl' => '/',
        ],
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ],
    ],

Lúc này ta có thể chạy theo cấu trúc domain/ten-controller
1
http://yiiadvanced/hello

Và đây là kết quả hiển thị trên trình duyệt

Yii2 framework -thao tác với controller


Như vậy là chúng ta đã cấu hình và chạy ứng dụng đầu tiên trên Yii2 framework, tuy nhiên chúng ta cần chú ý một số điểm sau:

- Yii2 Framework bắt buộc chạy từ phiên bản php 5.4 trở lên
- Yii2 sử dụng mảng bằng đấu [] , và tất nhiên array vẫn sử dụng bình thường
- Yii2 hay sử dụng cấu trúc <?= $ten_bien ?> để xuất giá trị

Phần này chúng ta chưa tìm hiểu model, phần model thao tác với database tương đối rộng, ta sẽ tìm hiểu vào bài viết sau


EmoticonEmoticon