前台 / 后台 / API 控制器

系统按请求场景加载不同命名空间下的控制器。核心控制器在 dayrui/Fcms/Control/,应用控制器在 dayrui/App/{应用}/Controllers/。二次开发请写应用控制器或在 My 层扩展,勿改 Fcms。

场景与命名空间

场景判定核心(无 s / 无应用)应用(有 APP_DIR)
前台IS_HOME(非后台且非会员)\Phpcmf\Control\*\Phpcmf\Controllers\*
后台入口定义 IS_ADMIN\Phpcmf\Control\Admin\*\Phpcmf\Controllers\Admin\*
APIs=apiIS_API\Phpcmf\Control\Api\*
会员s=memberIS_MEMBER\Phpcmf\Controllers\Member\*(或会员应用 Controllers)

URL 参数 c 对应类名(首字母大写),m 对应公开方法。默认 c=homem=index

基类

  • \Phpcmf\Common:控制器公共基类(继承框架 Frame\Controller),提供会员/管理员属性、站点信息、消息输出等方法。

  • \Phpcmf\App:应用公共基类(继承 Common),构造时检查当前应用是否已安装(install.lock)。

应用内控制器通常继承 \Phpcmf\Common\Phpcmf\App;内容模块样例可能继承模块扩展基类(如 \Phpcmf\Home\Module)。

前台控制器

核心位置dayrui/Fcms/Control/,例如 Home.php(首页)、Html.php(静态化相关)、Install.php

应用位置dayrui/App/{应用}/Controllers/

访问示例(应用 test 的前台首页):

最小示意:

后台控制器

核心位置dayrui/Fcms/Control/Admin/(系统、缓存、菜单、角色、字段、云应用等)。

应用位置dayrui/App/{应用}/Controllers/Admin/

须通过后台入口访问(如 /adminxxx.php?s=test&c=home&m=index)。命名空间为 \Phpcmf\Controllers\Admin

后台页面模板优先在应用 Views/,也可通过 My/View 覆盖核心后台模板。

API 控制器

核心位置dayrui/Fcms/Control/Api/,例如:

  • Api.php / Home.php:通用接口入口

  • Run.php:定时任务执行

  • File.php:文件相关

  • Pay.php / Buy.php:支付相关

  • Oauth.php / Sso.php:授权与同步登录

  • Rewrite.php:伪静态检测等

访问形态:

应用若提供 API,可在 Controllers/Api/ 下编写,命名空间 \Phpcmf\Controllers\Api,访问时带上应用的 s(按实际路由约定;核心 API 的 s 固定为 api)。

另有脚本型入口:如 public/api/cron.php 定义特殊 IS_API 后进入主程序执行任务,仍会落到 API 控制器逻辑。

应用目录约定(以 Test / News 为例)

与会员控制器的关系

s=member 且已安装会员应用时进入会员场景。应用内容亦可在 Controllers/Member/ 下提供会员侧功能(如草稿、投稿)。会员属于独立场景(IS_MEMBER),与前台 IS_HOME 互斥。

开发注意

  • 类名、文件名一致,且与 c 参数对应(不区分大小写解析,类名首字母大写)。

  • 方法须为 public,否则无法被路由调用。

  • 应用控制器在应用未安装时,若继承 \Phpcmf\App 会直接提示未安装。

  • 输出可用 Service::V()->display() 渲染模板,或 $this->_json() / $this->_msg() 等返回数据/消息(以基类提供的方法为准)。

  • 不要在 Fcms/Control 中新增业务控制器;业务放到 App 的 Controllers

本文地址:https://m.xunruicms.com/doc/xunrui/1478.html