一个控制器中的方法使用MVC调用另一个控制器中的方法

时间:2013-08-20 12:21:46

标签: php codeigniter

所以我有一个用户控制器,有更新配置文件的方法等。在我正在开发的系统中,用户需要发布文章等。所以我对系统的设计感到困惑。创建文章的主要逻辑将放在article_model下。但是我该怎么称呼这些方法呢?

  • 我可以在用户控制器中创建一个函数来调用文章模型来创建文章吗?
  • 我可以在用户控制器中调用一个方法并创建一个文章控制器,用户控制器调用文章控制器上的方法,该控制器又调用主逻辑的模型。
  • 或者直接调用连接到文章模型的文章控制器。

我个人觉得我需要有一个用户控制器进入这个系统,从逻辑上讲,用户创建文章。那么哪种设计在逻辑和最佳实践方面是完美的。

4 个答案:

答案 0 :(得分:2)

您可以在控制器中加载多个模型,您不仅限制与控制器位于同一域中的模型。因此,如果您需要与用户控制器中的文章进行交互,那么只需加载文章模型即可。正如deceze所说,你不应该在一个控制器中调用其他控制器; 肯定违背了MVC惯例。

在您的情况下,与文章的任何互动都应该在文章控制器中,可以通过 / articles / add 等网址访问。

答案 1 :(得分:1)

我实际上使用了codeigniter,他们这样做。如果您想从您的用户或配置文件控制器发布文章,您只需创建一个实例或加载您的模型。

class ProfileController extends BaseController {

    public function __construct()
    {
        $this->load->model('article_model');
    }
    public function index(){
        $this->article_model->post();
    }

}

答案 2 :(得分:0)

不要从另一个控制器调用控制器 您可以添加链接到任何使用配置文件调用的视图,该配置文件可以添加文章

如果您必须从另一个控制器调用控制器,您可以查看codeigniter hmvc HMVC: an Introduction and Application

答案 3 :(得分:0)

尝试将此扩展名HMVC用于CI。它允许在另一个控制器中调用控制器方法。像这样:

class Dashboard extends MX_Controller{
    public $autoload = array();

    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        $params = 'some_params';
        $data['some_data'] = Modules::run('another_controller/method', $params);
    }
}

another_controller - 简单CI控制器,展开MX_Controller