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
答案 0 :(得分:6)
您需要App :: uses()要在文件中使用的类。 对于视图,通常最好在最顶层的控制器中执行此操作:
<?php
App::uses('Cat', 'Model');
现在可以在所有控制器操作及其视图中访问Cat模型 - 尤其是通过静态访问(对于非静态访问,ClassRegistry :: init()通常会处理包含本身)。
但在你的情况下,你在这里滥用静态方法。 您应该只为非查询方法静态访问模型。
这里的方法首先应该是静态的。 使用控制器调用此方法并将结果传递给视图。
答案 1 :(得分:2)
您的代码中存在一些错误;
class Cat extend AppModel
应为class Cat extendS AppModel
(不是扩展中的额外's')$this
。静态方法没有要引用的类的“实例”,因此$this
将产生错误$this->Cat->find(...)
Cat
模型本身,它应该只是$this->find(...)
通常,您不会访问“视图”或“布局”中的“模型”。模型在Controller中使用,结果通过提供为“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);
答案 2 :(得分:0)
我正在使用此代码 -
试试这个
<?php
$cats = ClassRegistry::init('Cat')->getCat('eng');
pr($cats);
?>