企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 2.4 加载控制器 ~~~ 1. 新建app项目 2. 新建index控制器index方法 3. 加载控制器 ~~~ ### 1. 新建app项目 新建 `/app` 文件夹,接着创建 `/app/ctrl` 文件夹存放控制器文件,在控制器文件夹下创建一个 `/app/ctrl/indexCtrl.php` 为什么不直接创建 `index.php` 的原因,是为了防止控制器方法和类名重名。 ### 2. 新建index控制器index方法 *D:\wamp\www\web.com\app\ctrl\indexCtrl.php* ~~~ <?php namespace app\ctrl; class indexCtrl { public function index() { p("这是index控制器的index方法"); } } ~~~ ### 3. 加载控制器和方法 上一节,我们通过路由类实现了通过解析URL找到了控制器和对应的方法。那么这一小节,我们来加载对应的控制器和方法。 **定义模块名常量:** *D:\wamp\www\web.com\index.php* ~~~ define('MODULE', 'app'); ~~~ **加载控制器和方法:** *D:\wamp\www\web.com\core\thinkphp.php* ~~~ static public function run() { $route = new \core\lib\route(); // 解析URL获取控制器和方法名 $ctrlClass = $route->ctrl; $action = $route->action; $ctrlFile = APP.'/ctrl/'.$ctrlClass.'Ctrl.php'; $ctrlClass = '\\'.MODULE.'\ctrl\\'.$ctrlClass.'Ctrl'; // 判断控制器的类文件是否存在,否则抛出异常 if (is_file($ctrlFile)) { include $ctrlFile; // 实例化控制器类 $ctrl = new $ctrlClass(); // 判断控制器中的方法是否存在,否则抛出异常 if (method_exists($ctrl, $action)) { // 调用控制器中的方法 $ctrl->$action(); } else { throw new \Exception($ctrlClass."控制器中不存在".$action."方法"); } } else { throw new \Exception("找不到控制器".$ctrlClass); } } ~~~ > 常见 类/对象 的函数:<http://php.net/manual/zh/ref.classobj.php> **调整入口文件的运行框架的方法** *D:\wamp\www\web.com\index.php* ~~~ try { \core\thinkphp::run(); } catch (\Exception $e) { echo $e->getMessage(); } ~~~ ### 4. 效果 ![](https://box.kancloud.cn/8e0466536b313034cd9db33ec9345a69_742x285.png) ![](https://box.kancloud.cn/a8692ae4ca62a5f1185a85664daf8dd0_742x285.png) ![](https://box.kancloud.cn/0dcc2cb88be9b60900d78a56ca4ca85d_742x285.png)