0

私は、MongoDBデータベースでLithiumFrameworkを使用するWebアプリに取り組んでいます。

アプリケーションの1ページに-複数のオブジェクトタイプのデータを表示したい。モデル間の関係(つまり、belongsTo、hasManyなど)の概念を理解しています。しかし、私の質問はコントローラーの関係に関係しています。

たとえば、「People」と「Companies」という名前の2つのオブジェクトがあるとします。企業に関する具体的な情報を「人」の視点で示したい。私は次のことをしました:

1)「People」モデルに次の行を追加しました。

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

インスタンス化し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 に答える