hbsprogram.com

thủ thuật wordpress ,vps và mình thích thì mình viết thôi

Controllers trong Yii2 là 1 bộ phận quan trọng trong cấu trúc M-V-C (Model-View-Controlles) thần thánh nó có nhiệm vụ nhận request từ người dùng ,xử lý yêu cầu đó và trả lại dữ liệu qua view .Controllers extends từ \yii\base\Controller để xử lý dữ liệu

1 Tạo Controllers :

Bạn vào mục controllers trong frontend hoặc backends .Các bạn tạo 1 file có cấu trúc Ten_controllesController.php .Ví dụ như SiteController.php,UploadsController.php

Cấu trúc file controllers gồm các thành phần sau

<?php
namespace frontend\controllers;
use Yii;
use yii\web\Controller;
class SiteController extends Controller
{
 
}
?>

2 Controller Mặc định

Mặc định trong yii2 controllers mặc định là Site .Bạn muốn thay đổi nó sang controller của mình thì làm như sau ở trong file main.php mục frontend/config

<?php
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
);

return [
    'id' => 'app-frontend',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'controllerNamespace' => 'frontend\controllers',
	
    'components' => [
    	
        'request' => [
            'csrfParam' => '_csrf-frontend',
        ],
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
        ],
        'session' => [
            // this is the name of the session cookie used for login on the frontend
            'name' => 'advanced-frontend',
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
    	
        /*
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ],
        */
    ],
	'defaultRoute' => 'demo/index',
    'params' => $params,
];

Bạn để ý chỗ defaultRoute là demo/index. Khi mình truy cập vào trang home sẽ mặc định vào trang demo/index

3 Actions

<?php
namespace frontend\controllers;
use Yii;
use yii\web\Controller;

class DemoController extends Controller
{
	
	public function actionIndex()
	{
		$data="Hello word";
		return $this->render('index',['data'=>$data]);
	}
}

Action tạo ra các hành động đơn giản nhằm xác định các phương pháp hành động trong 1 controller .Ví dụ như hành động actionIndex ở trên chẳng hạn .

Phương pháp đặt tên cho các action như sau :

  • Chữ cái đầu tiên của mỗi action đều viết hoa .Ví dụ Index,Update
  • Không có dấu gạch chân,gạch ngang
  • Thêm tiền tố action vào trước mỗi action

Mặc định action ban đầu sẽ là actionIndex .Nhưng bạn có thể đổi sang action khác với lệnh như sau

public $defaultAction = 'view';

Nhằm đổi action mặc định vào Democontroller là actionview

4 Vòng đời của controller

Khi xử lý 1 yêu cầu request lên thì controller sẽ xử lý các bước như sau :

  • Hàm init sẽ được gọi khi controller được tạo và cấu hình
  • Sau đó controller sẽ gọi đến action defaute hoặc action được gọi tới
  • beforeAction() sẽ được gọi đến tiếp theo
  • action chạy
  • afterAction() tiếp tục được controller gọi đến
  • Sau đó thì kết quả response  được trả về tương ứng với request đó

Đó là 1 vòng đời hoàn chỉnh đối với mỗi controller .

Có gì không hiểu về mục controllers này bạn hãy để lại comment để mình có thể giúp bạn giải đáp những khúc mắc nhé