0

我正在开发一个使用 Lithium Framework 和 MongoDB 数据库的 Web 应用程序。

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

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

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

public $belongsTo = array('Companies');

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

use app\models\Companies;

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

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

无论哪种情况,我都需要语法方面的帮助。我正在用卢布找出应该调用的最佳方式。

在此先感谢您的帮助!

4

2 回答 2

0

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

因此,如果您有一个 url '/people/bob' 并且想要获取 Bob 的公司数据,只需将其添加到 People 控制器的 view 方法中。就像是

People::first(array('conditions' => array('name' => 'Bob'), 'with' => 'Companies'));
于 2013-03-11T04:06:11.677 回答
0

可以实例化 a CompaniesController(可能传入过程中$this->request'request'选项),然后调用其中的方法。但是,组织它的更好方法是将通用功能从两个位置移动CompaniesControllerCompanies并从两个位置调用它。

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');
    }
}
于 2013-03-11T08:43:59.620 回答