2016-11-03 5 views
1

私の問題はこれです。私はコントローラ "FacsController"とメソッドを持っています。cakephp別のモデルのデータを印刷

public function access() 
{ 
    $facs = $this->Facs->find()->all(); 
    return $facs; 
} 

このメソッドは完全に機能し、データが正しく返されます。 しかし、私が必要とするのは、このメソッドを別のコントローラ "PagesController"内で呼び出すことです。

public function display() 
{ 
    $var = new FacsController(); 
    $var->access(); 
    $this->set('vars', $var); 
    $this->set('_serialize', ['vars']); 
} 

残念ながらここでは私はFacsControllerから返されたデータを取得しません。 誰かが私を助けることができますか?私は間違って何をしています。

答えて

1

モデルのデータが必要な場合は、コントローラではなくモデルを使用します。あるコントローラーが別のコントローラーにアクセスする必要があると感じる場合、これはほとんどの場合、アプリケーション設計の失敗の指標となります。また、ユニット・テストの場合を除いて、自分でコントローラをインスタンス化することはありません!

DRYを維持したい場合は、モデル(テーブルクラス)で適切なカスタムメソッドを作成し、それを使用してさらにロジックをカプセル化します。

他のすべてのコントローラと同様に、$this->loadModel()、またはさらにTableRegistry::get()でモデルをロードします。

$var = $this->loadModel('Facs')->find()->all(); 

も参照してください。