请教下关于controller的继承
刚刚接触CI几天,对于php也是新手。大家尽情拍砖。看了手册create core classes一章里面System List里面有Cotroller,但是和别的比如Input等不一样,在library里面他并不是以CI_ 开头(有啥区别啊?),而且我试着试用MY_Controller,发现它并不能被控制类给继承。
现在我的想法是有 UserControllerBase 和 AdminControllerBase两者都继承Controller,然后别的控制类继承UserControllerBase或者AdminControllerBase。恩要达到这样的效果。
而且在CI里,我到现在还是不会实现继承,library中调用别的library类。不知道怎么实现,手册已经翻烂了。Model也不会继承。
55555~~ 我自己继承过 Model,是可以的。控制器还没有,应该可以吧?贴出你的代码看看。 <?phpif (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends Controller{
function MY_Controller(){
parent::Controller();
}
function test(){
return "this is MY Controller";
}
}
?>
就这样吧,控制器类调用test方法,报错说没有这个方法,我之前试了Email,起作用的。
站长大哥你还没有回答我的很多问题呢。
1,为嘛Controller和Model不加前缀CI_
2,即使Controller可以实现继承,他能否被两个不同类给继承,然后控制器类有可随便选择这两个中的一个来继承
3,library类里面我想调用其他library类该如何实现?难道用include <?php
class Base extends Controller {
function __construct(){
parent::Controller();
}
}
class Basic extends Base {
function __construct(){
parent::__construct();
}
}
我是这样继承的,很正常呀:)
回复 4楼 的帖子
这样肯定不是best practice吧而且我别的文件中类的想要继承上面的Base类,该如何呢? 没有其他方法:
http://codeigniter.com/forums/viewthread/68446/
http://codeigniter.com/forums/viewthread/70011/ 谢谢楼上的各位
问题差不多有了答案
关于继承框架本身应该没有提供类似功能(我觉得这点太土了,不知道别的诸如Cake等有没有) ,php5提供的__autoload方法大体上可以解决这个问题
library中调用model或者其他library 可以调用get_instance这个全局的方法在去load
ok,继续学习 我不知道你有什么答案了,你的问题还是你自己了解,而且好像遇到了很大的问题似的。
在application/libraries/目录下建立一个文件叫做MY_Controller.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class UserController extends Controller {
function UserController() {
parent::Controller();
}
}
class AdminController extends Controller {
function AdminController() {
parent::Controller();
}
}
?>
在application/controllers/目录下建立test.php
<?php
class Test extends AdminController {
/*
function Test() {
parent::AdminController();
}
*/
function index()
{
$data['name'] = 'shooray';
$this->smartyextended->view('test', $data);
}
}
?>
你看我这里还用了Smarty(这是我定制过了的,已经加到autoload.php),刷新页面,显示正常。不过需要注意的是,如果你不想在Test的构造函数里做什么事情,就最好不要写构造函数,像我那样注释掉,否则就得手动调用parent::AdminController();
这就是重载,我觉得CI挺好的,不需要什么__autoload,CI的问题是没有IDE支持,智能输入和调试。。。
[ 本帖最后由 shooray 于 2008-3-19 16:31 编辑 ] 奇怪了, 我始终不行 回复 9# Midnight
为什么不行,报什么错?
页:
[1]
2