📜  Yii-使用控制器(1)

📅  最后修改于: 2023-12-03 14:48:40.825000             🧑  作者: Mango

Yii-使用控制器

在Yii中,控制器是应用程序的重要部分之一,它负责处理请求、执行操作并为视图提供数据。在本文中,我们将介绍如何使用Yii框架的控制器。

创建控制器

要创建控制器,可以使用命令行工具。在终端中,切换到您的Yii应用程序根目录,并键入以下命令:

./yii gii/controller --controllerClass=ExampleController --viewPath=@app/views/example

其中,ExampleController是您要创建的控制器类的名称,@app/views/example是要创建视图文件的目录。Gii将自动生成一个控制器类和视图文件(如views/example/index.php)。

您还可以手动创建控制器。在controllers文件夹中创建一个新的PHP文件并定义以下内容:

<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;

class ExampleController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
}

这个控制器类包含一个动作actionIndex(),它将渲染一个名为index的视图文件。在这个例子中,这个视图文件应该位于views/example/index.php

处理请求

控制器的主要职责是处理来自用户的请求并执行相应的操作。要处理请求,您需要定义一个或多个“动作”方法,这些方法的名称以“action”开头。

例如,如果您的控制器类包含一个名为actionIndex()的方法,当用户访问该控制器时,系统将调用该方法。

class ExampleController extends Controller
{
    public function actionIndex()
    {
        // ...
    }
}

在动作方法中,您可以访问GET和POST参数、会话和Cookie数据以及Yii应用程序中的各种服务。

返回响应

当您的动作方法完成后,您需要在控制器中返回一个响应。最常见的做法是渲染一个视图文件。

class ExampleController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
}

在这个例子中,其中一个名为“index”的视图文件(如views/example/index.php)将被渲染。

您还可以通过响应类型来返回数据,比如JSON或XML。这需要更改Content-Type头并通过响应对象的send()方法手动发送响应。

public function actionGetData()
{
    Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

    $data = [
        'name' => 'John Doe',
        'age' => 30,
    ];

    return $data;
}

在这个例子中,当用户访问example/get-data时,控制器将返回一个JSON响应,其中包含一个名为nameage的数据。

前置和后置操作

Yii还支持前置和后置操作,这使您可以在每个动作方法之前和之后运行代码。这些操作也称为“过滤器”。

要定义一个前置操作,您可以在控制器中重写方法beforeAction()

class ExampleController extends Controller
{
    public function beforeAction($action)
    {
        if (Yii::$app->user->isGuest) {
            return $this->redirect(['site/login']);
        }

        return parent::beforeAction($action);
    }
}

在这个例子中,如果用户未登录,控制器将重定向到登录页面。

后置操作与前置操作类似,只需在控制器中重写afterAction()方法即可。

class ExampleController extends Controller
{
    public function afterAction($action, $result)
    {
        Yii::info('The action ' . $action->id . ' was executed.', __METHOD__);

        return $result;
    }
}

在这个例子中,每次动作方法完成后,Yii将记录一条日志。

结论

控制器是Yii应用程序的核心组件之一,它负责处理请求、执行操作并为视图提供数据。要创建控制器,您可以使用命令行工具或手动创建PHP文件。在动作方法中,您可以访问各种服务并返回响应。如果您需要在动作方法之前或之后运行代码,您可以使用前置和后置操作。