October cms-Backend (后端-controller和ajax)

本文深入探讨了后端控制器的设计与实现,包括MVC模式下控制器的角色、视图和路由的配置,以及如何使用AJAX处理后端请求。介绍了控制器的属性、动作、视图文件和路由规则,展示了如何通过AJAX方法与前端交互。

后端

Controllers & AJAX

Introduction 介绍

后端实现了MVC模式。
控制器管理后端页面并实现各种功能,如表单和列表。
本文描述了如何开发后端控制器以及如何配置控制器行为。

每个controller都是一个PHP脚本
该脚本位于Plugin目录的/controllers子目录中。

controller的view是在其目录下的.htm文件

controller的目录名与控制器类名小写保持一致

视图目录也可以包含控制器配置文件。控制器目录结构示例:

plugins/
  acme/
    blog/
      controllers/
        users/                <=== Controller view 目录
          _partial.htm        <=== Controller partial 文件
          config_form.yaml    <=== Controller config 文件
          index.htm           <=== Controller view 文件
        Users.php             <=== Controller 类
      Plugin.php
Class definition 类定义

控制器类必须继承\Backend\classes\Controller类。
与任何其他插件类一样,控制器应该属于插件名称空间( plugin namespace)。
插件中使用的控制器的最基本表示如下:

namespace Acme\Blog\Controllers;

class Posts extends \Backend\Classes\Controller {

    public function index()    // <=== Action method
    {

    }
}

通常每个控制器实现处理单一类型数据(a single type of data)(如博客文章或类别)的功能。
下面描述的所有后端行为都采用这种约定。

Controller properties controller属性

后端控制器基类定义了许多属性,这些属性允许配置页面外观和管理页面安全性

属性描述
$fatalError允许存储action方法中生成的致命异常,以便将其显示在视图中。
$user包含对后端用户对象的引用。
$suppressView允许阻止视图显示。可以在操作方法或控制器构造函数中进行更新。
$params路由参数数组
$action当前请求中正在执行的操作方法的名称。
$publicActions定义了无需后端用户身份验证即可使用的一系列操作。可以在类定义中覆盖。
$requiredPermissions查看此页面所需的权限。可以在类定义或控制器构造函数中设置。有关详细信息,请参见用户和权限。
$pageTitle设置page title,能在action方法中设置
$bodyClass用于自定义布局的body类属性。可以在控制器构造函数或action方法中设置。
$guardedcontroller特定方法,不应称为actions,能在controller构造器里面扩展
$layout为控制器视图指定自定义布局(看下方layouts)

Actions, views and routing 动作 视图和路由

actions(公共controller方法)与view文件(对应于该动作的页面)是一一对应的
后端视图文件使用php语法
例如:对应index方法的index.htm

<h1>Hello World</h1>

该页面的URL由作者名称,插件名称,控制器名称和操作名称组成。

backend/[author name]/[plugin name]/[controller name]/[action name]

上面的Controller结果如下:

http://example.com/backend/acme/blog/users/index

Passing data to views 传递data到视图

使用控制器的$ vars属性将任何数据直接传递到您的视图:

$this->vars['myVariable'] = 'value';

视图中可直接访问$ vars属性里面的变量

<p>The variable value is <?= $myVariable ?></p>

Setting the navigation context 设置导航内容

插件可以在插件注册文件( plugin registration file)中注册后端导航菜单和子菜单。
导航上下文确定当前后端页面激活的后端菜单和子菜单。您可以使用BackendMenu类设置导航内容:

BackendMenu::setContext('Acme.Blog', 'blog', 'categories');

第一个参数指定作者和插件名称。
第二个参数设置菜单。
可选的第三个参数指定子菜单。
通常您在控制器构造函数中调用BackendMenu :: setContext

namespace Acme\Blog\Controllers;

class Categories extends \Backend\Classes\Controller {

public function __construct()
{
    parent::__construct();

    BackendMenu::setContext('Acme.Blog', 'blog', 'categories');
}

您可以使用controller类的$ pageTitle属性设置后端页面的标题(请注意,表单和列表行为可以为您完成此操作):

$this->pageTitle = 'Blog categories';

Using AJAX handlers 用ajax方法

后端AJAX框架使用与前端页面相同的AJAX库。该库会自动加载到后端页面上。

Back-end AJAX handlers 后端ajax

后端AJAX方法可以在controller类或widgets中定义。
在控制器类中,AJAX被定义为公共方法,其名称以“ on”字符串开头
如onCreateTemplate,onGetTemplateList等。
后端AJAX可以返回数据数组,引发异常或重定向到另一个页面(请参阅AJAX事件处理程序)。
您可以使用$ this-> vars设置变量,并使用控制器的makePartial方法呈现部分并将其内容作为响应数据的一部分返回。

public function onOpenTemplate()
{
    if (Request::input('someVar') != 'someValue') {
        throw new ApplicationException('Invalid value');
    }

    $this->vars['foo'] = 'bar';

    return [
        'partialContents' => $this->makePartial('some-partial')
    ];
}
Triggering AJAX requests 发起ajax请求

参看前端ajax库章节 用法一样

注意:您可以使用前缀widget :: onName专门针对某个窗口小部件的AJAX处理程序。有关更多详细信息,请参见 widget AJAX handler article。

Controller middleware controller中间件

你可以定义中间件在后端controllers
为您提供一种方便的机制来更改HTTP请求的响应
例如,您可能希望为控制器中的某些操作指定HTTP标头,或者如果用户不符合特定条件,则将其重定向。
October中间件在response发送到浏览器之前 在cms处理request请求之后执行

为了使用中间件 你需要在controller的__construct()方法中调用middleware()

public function __construct()
{
    parent::__construct();

    $this->middleware(function ($request, $response) {
        // Middleware functionality
    });
}

middleware()方法需要一个带有两个参数的回调,$ request提供请求信息,$ response提供响应对象。回调应该返回$ response对象并进行修改。

例如,要将Test-Header标头添加到您的响应中,可以执行以下操作:

public function __construct()
{
    parent::__construct();

    $this->middleware(function ($request, $response) {
        $response->headers->set('Test-Header', 'Test');
        return $response;
    });
}

您还可以使用only()和exception()修饰符来控制哪些操作将使用中间件。例如,要限制中间件仅在索引操作上运行,您可以执行以下操作:

public function __construct()
{
    parent::__construct();

    $this->middleware(function ($request, $response) {
        // Middleware functionality
    })->only('index');
}

或者,对除索引操作以外的所有操作运行中间件:

public function __construct()
{
    parent::__construct();

    $this->middleware(function ($request, $response) {
        // Middleware functionality
    })->except('index');
}
本指南详细阐述基于Python编程语言结合OpenCV计算机视觉库构建实时眼部状态分析系统的技术流程。该系统能够准确识别眼部区域,并对眨眼动作与持续闭眼状态进行判别。OpenCV作为功能强大的图像处理工具库,配合Python简洁的语法特性与丰富的第三方模块支持,为开发此类视觉应用提供了理想环境。 在环境配置阶段,除基础Python运行环境外,还需安装OpenCV核心模块与dlib机器学习库。dlib库内置的HOG(方向梯度直方图)特征检测算法在面部特征定位方面表现卓越。 技术实现包含以下关键环节: - 面部区域检测:采用预训练的Haar级联分类器或HOG特征检测器完成初始人脸定位,为后续眼部分析建立基础坐标系 - 眼部精确定位:基于已识别的人脸区域,运用dlib提供的面部特征点预测模型准确标定双眼位置坐标 - 眼睑轮廓分析:通过OpenCV的轮廓提取算法精确勾勒眼睑边缘形态,为状态判别提供几何特征依据 - 眨眼动作识别:通过连续帧序列分析眼睑开合度变化,建立动态阈值模型判断瞬时闭合动作 - 持续闭眼检测:设定更严格的状态持续时间与闭合程度双重标准,准确识别长时间闭眼行为 - 实时处理架构:构建视频流处理管线,通过帧捕获、特征分析、状态判断的循环流程实现实时监控 完整的技术文档应包含模块化代码实现、依赖库安装指引、参数调优指南及常见问题解决方案。示例代码需具备完整的错误处理机制与性能优化建议,涵盖图像预处理、光照补偿等实际应用中的关键技术点。 掌握该技术体系不仅有助于深入理解计算机视觉原理,更为疲劳驾驶预警、医疗监护等实际应用场景提供了可靠的技术基础。后续优化方向可包括多模态特征融合、深度学习模型集成等进阶研究领域。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值