0
class Cat extend AppModel{
   public static function getCat($medium=NULL){
       $allcat = $this->Cat->find('all', array('contain' =>false,
                'conditions' => array('Cat.c_medium' => $medium), 
                 'order' => array('Cat.c_name' => 'asc')));
       return $allcat;
   }
}

default.ctp のようにこのメソッドにアクセスしたいのですが、うまくいきCat::getCat('eng'); ません。助けてください。

エラー :-Fatal error: Class 'Cat' not found in C:\xampp\htdocs\app\View\Layouts\default.ctp on line 100

4

3 に答える 3

6

ファイルで使用するクラスを App::uses() する必要があります。ビューの場合は、通常、一番上のコントローラーでこれを行う方が適切です。

 <?php
     App::uses('Cat', 'Model');

これで、すべてのコントローラー アクションとそのビューで Cat モデルにアクセスできるようになりました。特に、静的アクセスを介してアクセスできます (非静的アクセスの場合、ClassRegistry::init() は通常、それ自体をインクルードします)。

しかし、あなたの場合、ここで静的メソッドを悪用しています。非クエリ メソッドのモデルにのみ静的にアクセスする必要があります。

ここでのこのメソッドは、そもそも静的であってはなりません。コントローラーを使用してこのメ​​ソッドを呼び出し、結果をビューに渡します。

于 2013-03-06T08:22:49.633 に答える
2

コードにいくつかのエラーがあります。

  1. class Cat extend AppModelclass Cat extendS AppModel(extendsの余分な's'ではありません)
  2. $this静的メソッドで使用することはできません。静的メソッドには、参照するクラスの「インスタンス」がないため$this、エラーが発生します
  3. $this->Cat->find(...) モデル内で使用しているのはCat、それ自体です。$this->find(...)

通常、ビューまたはレイアウト内のモデルにはアクセスしません。モデルはコントローラー内で使用され、結果は「viewVars」として提供することでビューに渡されます。

//コントローラー

class MyController extends AppController {
    // Specify the Models you want to use
    public $uses = array('Cat');


    public function my_action()
    {
       $this->set('my_view_var_name', $this->Cat->getCat('eng'));
    }
}

//ビュー(app / View / My / my_action.ctp):

debug($my_view_var_name);

ClassRegistry :: init()経由

必要に応じて、モデルのインスタンスをどこでも、ビュー/レイアウト内でも取得できます。

ClassRegistry::init('ModelName');

// app / View / Layout/default.ctp内

$cats = ClassRegistry::init('Cat')->getCat('eng');
debug($cats);
于 2013-03-06T15:42:28.137 に答える