PHP搭建自己的MVC框架 控制器
程序员文章站
2023-02-28 15:27:54
判断接收到的路由 来进行处理
判断接收到的路由 来进行处理
<?php namespace core\lib; class route { public $ctrl; public $action; public function __construct() { /* * 隐藏index.php * 获取url参数部分 *返回对应控制器方法 */ if(isset($_server['request_uri']) && $_server['request_uri'] !='/'){ $path = $_server['request_uri']; $patharr = explode('/',trim($path,'/')); if(isset($patharr[0])){ $this->ctrl = $patharr[0]; } unset($patharr[0]); if(isset($patharr[1])){ $this->action = $patharr[1]; unset($patharr[1]); }else{ $this->action = 'index'; } $count = count($patharr) + 2; $i = 2; while($i < $count){ if(isset($patharr[$i+1])){ $_get[$patharr[$i]] = $patharr[$i+1]; } $i = $i+2; } } else { $this->ctrl = 'index'; $this->action = 'index'; } } }
最后路由的格式为 index/index/id/3/date/31 格式
通过俩参数去获得get的 值
如 id:3 date:31
如果 date后无值 则跳过循环 得出 id:3
$route = new \core\lib\route(); $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(); $ctrl->$action(); }else{ throw new \exception('找不到控制器'.$ctrlclass); }
然后得到的数据再去处理
得到对应的控制器 方法 参数
最终得到想要的控制器和方法