在单个模型中对方法进行分组的正确方法是什么?

时间:2015-03-28 11:02:36

标签: php codeigniter model-view-controller hmvc

我很抱歉这个头衔,也许我说不出来。但这就是我想要的:

现在,如果我创建一个模型 m.php 并将其放在models文件夹中,并使用以下代码:

class m extends CI_Model {

  public function username() {
    print "john doe";
  }

  public function password() {
    print "ABC123";
  }

}

现在,我可以在控制器中执行以下操作:

$this->load->model("m");
$this->m->username(); // prints john doe
$this->m->password(); // prints ABC123

现在我需要做的是以下面的方式调用上面的方法:

$this->m->genralinfo->username(); // prints john doe

$this->m->privacy->password(); // prints "ABC123"

我怎样才能做到这一点?我想这样做是为了将特定于某些东西的方法分组,这有助于我更好地构建我的代码。

**我知道可以为每组方法创建一个新模型,但我想在一个模型中保留与用户相关的所有内容**

使用单一型号甚至可以吗?

3 个答案:

答案 0 :(得分:1)

创建一个函数'general-info'和'privacy'来获取参数。 在控制器中调用它。

$m->generalinfo('username');

在模型中

public function generalinfo($v='') {
    switch($v){
     case 'username':
        $ret=$this->username; //you would have to fill the object first
        break;
     case 'name':
        $ret=$this->name; //same here
        break;
     default:
        $ret=Array();
        $ret['username']=$ret=$this->username;
        $ret['name']=$ret=$this->name;
   }
    return $ret;
} 

并注意视图中的输出。此示例将为您提供包含您请求的特定信息的字符串。或者是所有通用数据的数组。 你将不得不关心这些不同的情况。例如,检查控制器中的返回值。

但是这样你也可以进行ajax调用,并将返回值转换为JSON并将其推送到模态或其他任何内容。

答案 1 :(得分:1)

我想你想要这样

class m extends CI_Model
{
    public $genralinfo;
    function __construct()
    {
        parent::__construct();
        $this->genralinfo=new Genralinfo();
    }

}
class Genralinfo
//class Genralinfo extends CI_Model//you may extend CI_MODEL too
{
    public function username() {
        print "john doe";
    }

    public function password() {
        print "ABC123";
    }

}

答案 2 :(得分:0)

知道了。我把它放在模型中

public $info;
public function __construct() 
{ 
    parent::__construct();
    $this->info = (object) array('foo' => 'bar', 'property' => 'value'); 
} 

然后简单地说:

echo $class->obj->foo;//outputs bar