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 AppModel应该是class Cat extendS AppModel(不是扩展中的额外'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 回答
0

我正在使用此代码-

尝试这个

<?php
  $cats = ClassRegistry::init('Cat')->getCat('eng');
  pr($cats);
?>
于 2014-10-13T05:55:27.793 回答