我正在使用带有MongoDB数据库的Lithium Framework开发Web应用程序。
在应用程序的一个页面上 - 我想显示来自多个对象类型的数据。我理解模型之间的关系概念(即belongsTo,hasMany等)。但是,我的问题与控制器关系有关。
例如,假设我有两个名为“People”和“Companies”的对象。我想在“人物”视图中显示有关公司的具体信息。我做了以下事情:
1)在“人物”模型中,我添加了以下行:
public $belongsTo = array('Companies');
2)在“PeopleController”文件中,我还提供了对公司模型的引用,例如:
use app\models\Companies;
现在,在PeopleController中,我想调用CompaniesController文件中的方法。
我是否通过直接调用CompaniesController文件来访问它?或者,我是否必须通过公司模式。
在任何一种情况下,我都需要语法方面的帮助。我正在找卢布找出应该调用它的最佳方式。
提前感谢您的帮助!
答案 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');
}
}