加载控制器的方法
/***加载控制器
* $controller 控制器的路径, 支持数组和string
* $method 方法, 方法和控制器一一对应, 支持array和string
* $name 别名, name值得标准为controller
*/
public function controller($controller, $method = 'index', $name = '')
{
if ($controller == '')
{
return;
}
if (is_array($controller) AND is_array($method) AND !empty($method))
{
foreach ($controller as $k=> $control)
{
$this ->controller($controller, $method[$k]);
}
return;
}
if (is_array($controller) AND is_string($method))
{
foreach ($controller as $control)
{
$this ->controller($controller, $method);
}
return;
}
$x = explode('/', $controller);
if ($name == '')
{
$name = $x;
}
if (in_array($name, $this ->_ci_controllers))
{
return;
}
$CI = &get_instance();
if (isset($CI->$name))
{
show_error('控制器名称已经被占用了');
}
if (!is_dir(APPPATH . 'controllers/' . dirname($controller)) OR !file_exists(APPPATH.'controllers/'.strtolower($controller).'.php'))
{
show_error('加载的控制器不存在,无法加载');
}
if (($subclass = $CI ->config ->item('subclass_prefix')) == '' AND file_exists(APPPATH . 'core/' . $subclass . '_Controller.php'))
{
include APPPATH . 'core/' . $subclass . '_Controller.php';
}
include APPPATH . 'controllers/' . $controller . '.php';
if (!class_exists( $control = ucfirst($x)))
{
show_error('加载的类不存在');
}
$CI->$name = new $control();
$this->_ci_controllers[] = $name;
return true;
}
同时加入个属性$_ci_controllers, jiangke 发表于 2016-9-21 11:35
同时加入个属性$_ci_controllers,
一般这个加载控制器方法, 适合加载右侧的菜单, 头部, 底部这种公共部分,同时需要加载的方法中加载模板时设置第三参数为true,$this ->load->view('view', $data, true),默认为false, 同时return出去即可以了。
调用加载方法为:
$this ->load ->controller($controller, $method, $name);
$this ->$name->$method();
注意: 本方法适用于controllers下面有两级目录的项目, 其他的不适用,需要修改的 很赞!感谢楼主分享
页:
[1]