2013-03-10 47 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'); 
    } 
} 
相關問題