编写 ACF 控制器

来自 Alpine Linux

控制器是视图和模型之间的接口层。控制器包含使模型功能对用户可用的函数(动作)。动作解释来自用户的客户端数据,调用模型函数,并将模型数据转换为供视图显示。

控制器基础

控制器的基本功能是定义用户可用的动作。对于用户可以做的每件事,都应该有一个动作函数,并且该函数应该只执行一个动作。控制器不应该对系统进行任何更改,那是模型的功能。控制器不应该关心如何显示数据,那是模型的功能。

虽然通常一个网页对应一个动作,但不要陷入将动作视为网页生成器的陷阱。不应将动作视为“执行此网页所需一切的函数”,而应将其视为“执行特定请求的函数”。例如,ACF 设计者可能想要一个网页来显示文件列表以及可以对这些文件执行的一系列操作。与其创建一个返回文件列表并接受对它们执行操作的命令的动作,不如创建多个动作 - 一个用于简单地列出文件,另一个用于对文件执行的每个动作。然后,列出文件的动作的视图应生成指向每个可用文件操作的链接。如果您想在该视图中添加一些状态字段,与其将状态字段添加到列出文件的动作的输出中,不如创建另一个动作来返回状态并将其作为视图的组件加载。

MVC 函数

每个控制器都可以定义 mvc 函数,这些函数将在加载/卸载控制器以及调用动作之前/之后运行。最常见的用法是创建一个 mvc.on_load 函数来初始化变量和控制访问。控制器可能需要定义一个 mvc.on_unload 来释放 mvc.on_load 中加载的任何资源。更多信息可以在 mvc.lua 示例 中找到。

默认动作

虽然控制器中可能定义了许多动作,但控制器应指定一个动作作为默认动作。如果用户尝试访问控制器而未指定动作,则 acf_www-controller 将会将他们重定向到默认动作。

default_action = "status"

输入

当控制器由 mvc 应用程序加载时,将为控制器函数、模型函数和几个其他变量创建一个表。此表称为 self,是传递给每个动作的唯一参数。self 还使用 Lua 元表,以允许控制器访问 acf_www-controller 和 mvc 的函数。控制器不应访问在其作用域之外定义的全局变量。控制器可以加载和使用库。

self

self 表包含一些控制器特别感兴趣的条目。

  • self.clientdata - 客户端数据。通常是来自 Web 浏览器的 POST 或 GET 数据中的信息。
  • self.conf - 配置数据,包括有关当前用户请求、应用程序和已定义目录的信息。
  • self.sessiondata - 会话数据,包含有关用户权限、菜单选项和命令结果的信息。
  • self.model - 模型表,包含对所有模型函数的引用。

libraries

控制器可以访问系统中定义的许多库。但是,控制器开发者应该对 controllerfunctions 库特别感兴趣。此库旨在成为控制器的帮助程序库,处理常用功能。如果正确使用此库,则大多数动作将只包含一行代码。

重定向

控制器更高级的功能之一是重定向。使用 acf_www-controllerredirectredirect_to_referrer 函数,控制器可以使 Web 浏览器重定向到另一个页面。redirect 函数会导致简单地重定向到不同的页面。例如,这可以用于在使用表单成功创建新项目后重定向到列表页面。redirect_to_referrer 函数处理将表单显示为组件和处理命令操作所需的重定向。这些在 这里 这里 进行了描述。当实现表单或命令操作时,您应该使用 redirect_to_referrer