2016-07-14 7 views
0

私はProductsController productsCount()に機能を持っています。それは私にテーブルのレコードの量を与える。cakephp 3の異なるビューでコントローラから関数を呼び出す方法は?

public function productsCount() { 
     $productsAmount = $this->Products->find('all')->count(); 

     $this->set(compact('productsAmount')); 
     $this->set('_serialize', ['productsAmount']); 

    } 

PageControllerの観点からこの関数を呼び出す必要があります。私は単純にctpファイルで製品の数を表示したいです。

どうすればいいですか?

答えて

0

私は、PageControllerで製品数を見つけるほうが意味があると思います。したがって、$productsAmount = $this->Page->Products->find('all')->count();のようなものをPageControllerのviewアクションに追加し、$productsAmountに設定してください。ページと商品が関連していない場合は、商品にuseを含める限り、検索の呼び出しをそのままにすることができます。 http://book.cakephp.org/3.0/en/intro/conventions.html#model-and-database-conventions

モデル名は単数形でなければなりませんので、製品に製品を変更します。

また、モデルの命名規則のためにこれをチェックしてください。

-2

また、あなたは

public static function productsCount() { 
    return = $this->Products->find('all')->count(); 
} 

以下のようにstatic方法を定義し、他のアクションでself::productsCount()を使用することができます。

これは、コントローラで数えてカウントする必要がある場合にのみ有効です。それ以外の場合は、以下のように直接使用することができます。

$this->Products->find('all')->count(); 
+0

静的関数では '$ this'を使うことはできません。 –

2

をhelpers-作成に適切な文書を取得します。これらは、コントローラに関係なく、任意のビューに呼び出すことができるミニコントローラとして機能します。

src/Template/Cell/ProductsCount/display.ctpであなたのsrc/View/Cell/productsCountCell.php

namespace App\View\Cell; 

use Cake\View\Cell; 

class productsCountCell extends Cell 
{ 

    public function display() 
    { 
     $this->loadModel('Products'); 
     $productsAmount = $this->Products->find('all')->count(); 

     $this->set(compact('productsAmount')); 
     $this->set('_serialize', ['productsAmount']); 
    } 

} 

src/Template/Cell/ProductsCount/display.ctp

src/View/Cell/productsCountCell.phpとテンプレートを作成しますが、あなたが望むどのようにそれをレイアウト:

<div class="notification-icon"> 
    There are <?= $productsAmount ?> products. 
</div> 

は今、あなたはどのビューにセルを呼び出すことができますそうですね:

$cell = $this->cell('productsCount'); 
関連する問題