📜  Yii-控制器(1)

📅  最后修改于: 2023-12-03 15:21:21.235000             🧑  作者: Mango

Yii 控制器

Yii 控制器是一个基于 PHP 的 Web 应用程序框架。它充分利用了最新的 PHP 技术和最佳的性能实践,以提高开发人员的生产力和 Web 应用程序的质量。Yii 框架的核心组件包括 MVC(模型-视图-控制器)架构、图像处理、模板引擎、表单验证和数据库抽象。其中,控制器(Controller)是其 MVC 架构的一个关键组件之一。

控制器是什么?

控制器是一个处理请求并生成响应的 PHP 类。它充当 Model 和 View 中间的协调者,负责将输入的请求路由到正确的处理方法(即 Action)中,并将处理后的结果返回给 View 展示。在 Yii 的 MVC 架构下,控制器通常保存在 controllers 文件夹下。

控制器的核心功能
  • 路由请求:将请求路由到正确的处理方法上。
  • 接收输入:从请求中获取参数和数据。
  • 处理业务逻辑:根据业务需求对接收到的数据进行处理。
  • 返回响应:将处理后的数据返回给 View 展示。
控制器的结构

控制器是一个 PHP 类,通常应该具有以下结构:

  1. 命名空间(Namespace):Yii 推荐使用命名空间来避免类名冲突,通常和控制器的文件夹路径一致。
  2. 继承关系(Inheritance):控制器通常继承自 yii\web\Controller 或其子类,以获得更多的功能和操作方法。
  3. 处理方法(Action):控制器的主要功能就是根据路由请求调用相应的处理方法来实现业务逻辑。处理方法的命名规则是 action[MethodName](),例如 actionIndex()
  4. 过滤器(Filters):用于在处理方法之前或之后执行额外的代码,例如用户身份验证、缓存开启等。

下面是一个简单的控制器示例:

<?php

namespace app\controllers;

use yii\web\Controller;

class SiteController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
}
控制器的常用操作
  1. 渲染视图 render()

render() 方法用于渲染一个视图文件并输出结果,接受一个字符串参数,指定要渲染的视图文件的路径。如果不指定,将默认渲染与控制器的处理方法同名的视图文件。

public function actionIndex()
{
    return $this->render('index');
}
  1. 重定向 redirect()

redirect() 方法用于将用户重定向到另一个 URL 地址,接受一个字符串参数,指定要重定向的 URL 地址。

public function actionLogin()
{
    if ($this->checkLogin()) {
        return $this->redirect(['/user/profile']);
    } else {
        return $this->render('login');
    }
}
  1. 响应 JSON 数据 asJson()

asJson() 方法用于将数据以 JSON 格式输出给客户端,接受一个参数,指定要输出的数据。

public function actionApi()
{
    Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    return $this->asJson(['message' => 'Hello, World!']);
}
  1. 获取请求参数 get()

get() 方法用于获取 GET 请求参数,接受一个字符串参数,指定要获取的参数名称。

public function actionSearch()
{
    $keyword = Yii::$app->request->get('keyword');
    // ...
}
控制器的过滤器

过滤器是一种在控制器处理方法之前或之后执行的代码块,它可以用于增强控制器的功能和安全性。在 Yii 中,过滤器使用注释来定义。下面是一个示例:

/**
 * Class SiteController
 * @package app\controllers
 *
 * @property Request $request
 * @method string getUniqueId()
 */
class SiteController extends Controller
{
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            [
                'class' => \yii\filters\HttpCache::class,
                'only' => ['index'],
                'lastModified' => function () {
                    return time();
                },
                'etagSeed' => function () {
                    return Yii::$app->user->id;
                },
            ],
            [
                'class' => \yii\filters\AccessControl::class,
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }

上面的代码定义了两个过滤器:HttpCacheAccessControlHttpCache 用于启用 HTTP 缓存,AccessControl 用于控制用户访问权限。

总结

控制器是 Yii 框架 MVC 架构的核心组件之一,可以通过路由请求调用相应的处理方法来实现业务逻辑。控制器还可以使用过滤器来增强它的功能和安全性。熟悉 Yii 控制器的使用和常用操作,有助于开发高效、可靠、安全的 Web 应用程序。