2013-03-10 55 views
0

我正在使用带有MongoDB数据库的Lithium框架的Web应用程序。锂框架体系结构 - 从另一个控制器调用

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

例如,假设我有两个名为“People”和“Companies”的对象。我想以“人”的观点显示公司的具体信息。我也做了以下内容:

1)在“人”的模式,我已经添加了以下行:

public $belongsTo = array('Companies'); 

2)在“把PeopleController”文件,我还包含一个参考公司模式,如:

use app\models\Companies; 

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

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

无论哪种情况,我都需要语法帮助。我有卢布计算出这应该被称为最好的方式。

在此先感谢您的帮助!

+0

作为@克里斯说,我建议你重新考虑你的架构。考虑将功能从公司控制器移到公司模型。如果你想要更具体的建议,控制器方法有什么作用? – michaeltwofish 2013-03-11 10:17:07

回答

0

你应该重新思考你的结构 - 你的控制器方法应该真的抓住你所需要的所有资源,不管它们是什么。

因此,如果您有一个url'/ people/bob',并且您想获取Bob的公司数据,请将其添加到您的People控制器的视图方法中。喜欢的东西

People::first(array('conditions' => array('name' => 'Bob'), 'with' => 'Companies')); 
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'); 
    } 
} 
相关问题