ACF acf www-controller.lua 参考文档
acf_www-controller.lua 参考文档
acf_www-controller.lua 为 acf web 应用程序提供了基本的调度器、异常处理程序和应用程序级函数。
(内部函数) 构建权限和菜单表,并将其存储在 self.sessiondata 中,以便在用户会话期间的每个页面上使用。
- 搜索角色文件以确定当前用户有权查看哪些控制器和操作
- 搜索菜单文件以创建完整的菜单结构
- 从菜单中删除用户无权执行的任何操作
check_permission ( self, controller, action )
(内部函数) 返回一个布尔值,以告知该用户是否被允许访问此控制器/操作组合。 决定基于 self.sessiondata 中的权限表。
find_template ( appdir, prefix, controller, action, viewtype )
(内部函数) 查找 .lsp (Lua Server Page) 模板。 查找第一个匹配的
- appdir/prefix/template-controller-action-viewtype.lsp
- appdir/prefix/template-controller-viewtype.lsp
- appdir/prefix/template-action-viewtype.lsp
- appdir/prefix/template-viewtype.lsp
它会遍历 prefix 的每个上层级别,直到 prefix 为 “nil”。 返回第一个找到的 lsp,或 false。
find_view ( appdir, prefix, controller, action, viewtype )
(内部函数) 查找 .lsp (Lua Server Page) 视图。 查找第一个匹配的
- appdir/prefix/controller-action-viewtype.lsp
- appdir/prefix/controller-viewtype.lsp
has_view ( self )
(内部函数) 如果存在专门用于此操作的 .lsp (Lua Server Page) 视图,则返回 true。
dispatch_component ( str, clientdata, suppress_view )
(内部函数) 此函数可用于每个视图文件,以允许加载组件(子操作)。 它将启动一个新的控制器/操作,传递任何 clientdata,并返回操作的结果。 如果 suppress_view 不为 true,它将显示组件操作的视图。
create_helper_library ( self )
(内部函数) 创建一个助手库,以传递给每个视图。 目前,唯一传递的函数是 dispatch_component,但在未来可能会添加需要访问 self 的函数。
view_resolver ( self )
(内部函数) 返回一个将运行模板和视图的函数。 模板通过 find_template 找到,视图通过 find_view 找到。 还会生成并返回除 viewtable 之外的视图参数。
mvc.on_load ( self, parent )
设置 self.conf 和 self.sessiondata。 如果客户端报告会话 ID,此函数将尝试加载现有会话。 否则,将创建一个新会话并调用 build_menus 以填充权限和菜单表。
mvc.on_unload ( self )
在返回之前保存会话数据。 此函数将在操作完成且在显示视图之前调用。
exception_handler ( self, message )
如果 message 是一个表且 message.type="redir",则向客户端发出 302 Moved,重定向的目标是 message.prefix/message.controller/message.action message.extra。 如果在显示组件时找到,则会输出错误消息。
如果 message.type 是 “redir_to_referrer”,则向客户端发出 302 Moved,重定向的目标是引用页面。
如果 message.type 是 “dispatch”,则调用父级 (mvc.lua) 异常处理程序。
否则,调用父级 (mvc.lua) 异常处理程序。
dispatch ( self, prefix, controller, action )
MVC dispatch 函数的重载,用于检查权限(并在不允许时重定向)、处理组件、向视图传递更多数据以及允许显示没有操作的视图。 控制器操作在受保护的 xpcall 中执行。
- 通过调用 check_permission 检查用户是否有权访问此控制器/操作
- 如果没有操作权限,则重定向到默认操作
- 如果没有控制器权限,则重定向到默认控制器/操作
- 如果控制器/操作存在
- 创建一个 self:new ( prefix .. controller) mvc 对象
- 运行任何现有的 worker.mvc.pre_exec 函数
- 运行 worker.action
- 运行任何现有的 worker.mvc.post_exec 函数
- 调用 destroy 以销毁 mvc 对象
- 从 view_resolver 获取视图函数和参数
- 使用 worker.action 的结果执行视图
- 返回 worker.action 的结果
如果发生错误,则运行 exception_handler 函数。 如果可能,则运行新 mvc 对象的异常处理程序,否则 self::exception_handler 函数处理错误。 如果在创建新 mvc 对象后发生异常,则保证 mvc.on_unload 运行,但 mvc.post_exec 不运行。
redirect ( self, str )
导致重定向到指定的路径。 如果在字符串中未找到 prefix 或 controller,则使用当前的 prefix 和/或 controller。 如果在字符串中未找到 action,则使用默认操作。 实际的重定向在 exception_handler 中定义。 此函数可以由操作调用以重定向到另一个操作,而不是显示其自己的视图。 注意:在调用 redirect 后,将不会调用控制器 post_exec 函数。
redirect_to_referrer ( self )
如果我们已对命令执行操作,请将结果放入会话中,并导致重定向到引用页面(假设它不同)。 如果不是,请检查会话中是否有来自先前重定向的结果。 实际的重定向在 exception_handler 中定义。 此函数应由操作调用以重定向到引用页面,而不是显示其自己的视图。 这允许用作组件的操作在完成请求的命令后显示容器视图,然后在重新加载为组件时显示结果。 注意:如果 redirect_to_referrer 导致重定向,则不会调用控制器 post_exec 函数。
logevent ( message )
将消息写入 acf 日志文件。