ci高级用法篇之扩展核心类

在上一篇文章ci高级用法篇之创建自己的类库中,你是否觉得每个控制器的构造方法都去执行校验代码其实违背了编程规范中的DRY(do'nt repeat yourself)原则呢?

其实我们完全可以把校验的代码在父类的构造函数中。ci中控制器的父类是CI_Controller,现在我们来扩展这个父类。

在application/core目录下创建一个类文件,MY_Controller.php,内容如下:

<?php
class MY_Controller extends ci_Controller{

	public function __construct(){
		parent::__construct();
		$this->load->library('auth');
		$this->auth->checkPower();
	}
}


在将welcome控制器修改为如下版本,让其继承MY_Controller:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends MY_Controller {

	/**
	 * Index Page for this controller.
	 *
	 * Maps to the following URL
	 * 		http://example.com/index.php/welcome
	 *	- or -
	 * 		http://example.com/index.php/welcome/index
	 *	- or -
	 * Since this controller is set as the default controller in
	 * config/routes.php, it's displayed at http://example.com/
	 *
	 * So any other public methods not prefixed with an underscore will
	 * map to /index.php/welcome/<method_name>
	 * @see http://codeigniter.com/user_guide/general/urls.html
	 */
	public function __construct(){
		parent::__construct();
	}

	public function index()
	{
		$this->load->view('welcome_message');
	}
}
再次访问http://localhost/ci2/,结果出现了同样的报错信息:

非法访问


注意:

①扩展的类必须申明由父类扩展而来.

②新扩展的类所在的文件必须以 MY_ 为前缀(这个选项是可配置的,下面有说明).


如果不喜欢my作为类前缀,可以在application/config/config.php 文件找到这一项修改为除ci_以外的前缀名:

$config['subclass_prefix'] = 'MY_';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值