系统按请求场景加载不同命名空间下的控制器。核心控制器在 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\* |
| API | s=api → IS_API | \Phpcmf\Control\Api\* | 无 |
| 会员 | s=member → IS_MEMBER | — | \Phpcmf\Controllers\Member\*(或会员应用 Controllers) |
URL 参数 c 对应类名(首字母大写),m 对应公开方法。默认 c=home、m=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 覆盖核心后台模板。
核心位置: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 控制器逻辑。
当 s=member 且已安装会员应用时进入会员场景。应用内容亦可在 Controllers/Member/ 下提供会员侧功能(如草稿、投稿)。会员属于独立场景(IS_MEMBER),与前台 IS_HOME 互斥。
类名、文件名一致,且与 c 参数对应(不区分大小写解析,类名首字母大写)。
方法须为 public,否则无法被路由调用。
应用控制器在应用未安装时,若继承 \Phpcmf\App 会直接提示未安装。
输出可用 Service::V()->display() 渲染模板,或 $this->_json() / $this->_msg() 等返回数据/消息(以基类提供的方法为准)。
不要在 Fcms/Control 中新增业务控制器;业务放到 App 的 Controllers。