锂框架架构 - 从另一个调用一个控制器

时间:2013-03-10 23:16:15

标签: lithium

我正在使用带有MongoDB数据库的Lithium Framework开发Web应用程序。

在应用程序的一个页面上 - 我想显示来自多个对象类型的数据。我理解模型之间的关系概念(即belongsTo,hasMany等)。但是,我的问题与控制器关系有关。

例如,假设我有两个名为“People”和“Companies”的对象。我想在“人物”视图中显示有关公司的具体信息。我做了以下事情:

1)在“人物”模型中,我添加了以下行:

public $belongsTo = array('Companies');

2)在“PeopleController”文件中,我还提供了对公司模型的引用,例如:

use app\models\Companies;

现在,在PeopleController中,我想调用CompaniesController文件中的方法。

我是否通过直接调用CompaniesController文件来访问它?或者,我是否必须通过公司模式。

在任何一种情况下,我都需要语法方面的帮助。我正在找卢布找出应该调用它的最佳方式。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您应该重新考虑您的结构 - 您的控制器方法应该真正获取该视图所需的所有资源,它并不重要。

所以,如果你有一个网址' / people / bob'并且您希望获取Bob的公司数据,只需将其添加到People控制器的view方法即可。像

这样的东西
People::first(array('conditions' => array('name' => 'Bob'), 'with' => 'Companies'));

答案 1 :(得分:0)

可以实例化CompaniesController(可能会将$this->request传递给流程中的'request'选项)然后调用其中的方法。但是,更好的方法是将常用功能从CompaniesController移至Companies并从两个位置调用。

use app\models\Companies并没有真正成为“参考”。它只是表明Companies确实意味着app\models\Companies。我认为“别名”是一种更好的思考方式。请参阅http://php.net/manual/en/language.namespaces.importing.php

示例:

// in app/models/Companies.php
namespace app\models;

class Companies extends \lithium\data\Model {
    public static function doSomething() {
      // do something related to companies.
    }
}

// in app/controllers/CompaniesController.php
namespace app\controllers;

use app\models\Companies;

class CompaniesController extends \lithium\action\Controller {
    public function index() {
        $result = Companies::doSomething();
        return array('some' => 'data', 'for' => 'the view');
    }
}

// in app/controllers/PeopleController.php
namespace app\controllers;

use app\models\Companies;

class PeopleController extends \lithium\action\Controller {
    public function index() {
        $result = Companies::doSomething();
        return array('some' => 'data', 'for' => 'the view');
    }
}