Codeigniter MVC,我应该将业务逻辑从模型转移到Controller中以使用ORM吗?

时间:2013-03-25 12:25:30

标签: php codeigniter design-patterns orm workflow

我尝试将当前项目从使用常规CI查询构建器迁移到使用ORM,因为我的数据库越来越大,并且我有更多的20 FK和表之间的关系。

所以我现在正在为CI寻找一个好的主持人。我找到了IgnitedRecord,但我遇到了一个很大的问题。

示例models / users.php:

class user extends IgnitedRecord {

public function is_loged(){
return $this->session->userdata('user');
}

问题是$this不再指向CI,并且它返回Undefined property: user::$session与任何CI类/库相同。

有没有办法解决这个问题?或者我是否需要在每个i.r中使用$CI =& get_instance();。模特?

由于我的模型包含我的大部分应用业务逻辑,我觉得在我的所有模型中$CI =& get_instance();都有点不舒服,

其他解决方案是将所有逻辑移动到控制器中!或者删除这个orm并坚持使用本机查询构建器:p。

**接下来的问题**当使用orm(我之前从未使用过)时,我应该将逻辑移到控制器上,只保留orm的模型!!!

会破坏我的DRY法术力,因为很多时候我将属性/方法设置到模型中并从视图/其他控制器访问它们一个无法在控制器内完成的功能,因为我无法从视图中引用控制器属性/方法/其他控制器。

问题的例子:

class Auth extends CI_Controller{
public $msg='hello world';

function index(){
$this->load->view('login');
}
}


class user extends CI_MODEL{
public $msg='HELLO FROM YOUR MODEL';
}

/*VIEW */
<?
echo $this->user->msg;//WORKS fine.
echo $this->auth->msg;//WILL NOT WORK. will throw an UNIDENTIFIED auth error
?>

另外我设计我的流程通常是控制器开始加载所有插件(例如:models / plugins / * .php)这些插件设置一些数据属性供主模型使用,加载所有插件后控制器加载主模型并执行其逻辑并将结果发送回视图:)。

示例

models/plugins/settings.php:
    function config(){
        $this->msg = 'hello';
        $this->user = 'sam';
        return;
    }

models/hello.php
    function replace_sam (){
        $new='NONAME';
        if($this->settings->user=='sam') return $this->settings->msg.' '.$new
        else return $this->settings->msg.' '.$this->settings->user;
    }

controllers/home.php
    function index(){
        $this->load->model('plugins/settings');
        $this->settings->config();

        $this->load->model('hello');   

        echo $this->hello->replace_sam();
        //echo hello NONAME
    }

我希望你从这个简单的例子中得到我的观点..所以你认为我应该重写每一件事并将逻辑移到控制器上!!

我感谢你的意见。所以如果你认为是的我应该为orm留下模型,那么请向我解释这不会是一个巨大的浪费!

1 个答案:

答案 0 :(得分:1)

如果你看一下system / core / model.php,你会发现它是一个非常简单的类。它只需要在需要时调用$CI =& get_instance()。因此,将相同的__get()方法添加到您的类中将使它们与内置的方法一样好。