thinkphp中模型的概念问题
因为以前是用CI的,忽然转来THINKPHP有点不习惯。因为以前CI里,我是将model做为执行和方法封装用,而控制器就象触发器一样。但现在TP里,控制器好像完全只能用于...
因为以前是用CI的,忽然转来THINKPHP有点不习惯。
因为以前CI里,我是将model做为执行和方法封装用,而控制器就象触发器一样。
但现在TP里,控制器好像完全只能用于处理DB。
我建了一个模型
<?php
class isonlineModel extends Model {
private $username,$uid,$ACtype,$lasttime;
/**
* 检查管理员是否在线,如果不在线,自动跳转到登陆控制器
*/
public function __construct(){
import("Think.Util.Session"); //载入session类
if(empty($this->username)
$this->username = Session::get('konaAdminUsername');
if(empty($this->uid))
$this->uid = Session::get('konaAdminUid');
if(empty($this->ACtype))
$this->ACtype = Session::get('konaAdminACtype');
if($this->is_online()===false){
$this->redirect('admin:login');
}else{
//跳到main管理器
$this->redirect('admin:index');
}
}
}
其实就是验证管理员是否登陆,如果是,就到管理界面,否则就到登陆。
这是每一个控制器都必须引入的(放在析构函数那里)。
以下是控制器代码:
<?php
/**
* 后台首页控制器
* @create date : 2010-4-17 22:18
* @update date : 2010-4-17 22:18
*/
class indexAction extends Action {
public function __construct(){
$a = M('isonline');
$a->is_online();
}
错误提示为:
Model:is_online您所请求的方法不存在!
是不是model里不能这样用?=。=
那起不是要巨增控制器的文件长度!? 展开
因为以前CI里,我是将model做为执行和方法封装用,而控制器就象触发器一样。
但现在TP里,控制器好像完全只能用于处理DB。
我建了一个模型
<?php
class isonlineModel extends Model {
private $username,$uid,$ACtype,$lasttime;
/**
* 检查管理员是否在线,如果不在线,自动跳转到登陆控制器
*/
public function __construct(){
import("Think.Util.Session"); //载入session类
if(empty($this->username)
$this->username = Session::get('konaAdminUsername');
if(empty($this->uid))
$this->uid = Session::get('konaAdminUid');
if(empty($this->ACtype))
$this->ACtype = Session::get('konaAdminACtype');
if($this->is_online()===false){
$this->redirect('admin:login');
}else{
//跳到main管理器
$this->redirect('admin:index');
}
}
}
其实就是验证管理员是否登陆,如果是,就到管理界面,否则就到登陆。
这是每一个控制器都必须引入的(放在析构函数那里)。
以下是控制器代码:
<?php
/**
* 后台首页控制器
* @create date : 2010-4-17 22:18
* @update date : 2010-4-17 22:18
*/
class indexAction extends Action {
public function __construct(){
$a = M('isonline');
$a->is_online();
}
错误提示为:
Model:is_online您所请求的方法不存在!
是不是model里不能这样用?=。=
那起不是要巨增控制器的文件长度!? 展开
2个回答
展开全部
我觉的你对thinkphp的model理解不大对,tp的model和你说的ci的model是不一样的
tp里的model是用来封装数据库模型的,而你要实现的是控制用户请求,这已经属于控制器的范畴了,所以不能这样$a = M('isonline');而应该是写一个全局的action,比如globalAction,让它继承tp的action,然后在 globalAction的_initialize()方法中session判断,
然后所有的需要权限判断的Action都继承globalAction,而不是系统的acton,这样每次实例化action的时候都会先检查用户session
我是个初学者,刚接触thinkphp没些天,理解的也不是很透彻,但tp源码就是这么写的,系统Action的构造函数:
public function __construct()
{
//实例化视图类
$this->view = Think::instance('View');
//控制器初始化
if(method_exists($this,'_initialize'))
$this->_initialize();
}
它会检查是否有_initialize方法。。。,有的话就调用initialize
tp里的model是用来封装数据库模型的,而你要实现的是控制用户请求,这已经属于控制器的范畴了,所以不能这样$a = M('isonline');而应该是写一个全局的action,比如globalAction,让它继承tp的action,然后在 globalAction的_initialize()方法中session判断,
然后所有的需要权限判断的Action都继承globalAction,而不是系统的acton,这样每次实例化action的时候都会先检查用户session
我是个初学者,刚接触thinkphp没些天,理解的也不是很透彻,但tp源码就是这么写的,系统Action的构造函数:
public function __construct()
{
//实例化视图类
$this->view = Think::instance('View');
//控制器初始化
if(method_exists($this,'_initialize'))
$this->_initialize();
}
它会检查是否有_initialize方法。。。,有的话就调用initialize
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询