【问题标题】:CakePHP: Connection between model and controller failedCakePHP:模型和控制器之间的连接失败
【发布时间】:2012-12-10 12:50:22
【问题描述】:

我的最新 CakePHP 应用程序出现问题。

我已经为类别制作了模型和控制器。

型号:Categorie.php

class Categorie extends AppModel{
    public $name = 'Categorie';
}

控制器:CategoriesController.php

class CategoriesController extends AppController {
    public function index(){
        $this->set('list', $this->Categorie->find('all'));
    }
}

但是当我访问该页面时,我得到了错误:

Fatal error: Call to a member function find() on a non-object 

当我添加时

$this->loadModel('Categorie');

到我的控制器中的索引函数它将起作用。

所以我猜模型和控制器之间的连接不起作用,但我不确定,也不知道如何解决这个问题。

请帮帮我。

thnx

【问题讨论】:

  • 也许有人应该告诉你“Categories”的单数是“Category”——那么你就不需要问这个问题了 :) 因为蛋糕会自动做所有事情。但是你现在应该仍然标记正确的答案。

标签: cakephp model controller connection


【解决方案1】:

CakePHP 使用控制器名称单数变体来匹配模型,categories 的单数是 category,而不是 categorie

【讨论】:

  • 哦,我真是太愚蠢了,我没有意识到 Cake 对英语如此敏感,因为英语不是我的第一语言,我没有意识到单一类别是用 Y 代替如果IE。谢谢
  • 如果您不确定英文单词,您可以随时使用Inflector::pluralizeInflector::singularize 从任何工作视图让Cake 显示它期望的正确翻译。另请参阅 the book page 关于此实用程序。
【解决方案2】:

正如@ndm 所说,您应该使用 CakePHP 约定。 你的表应该被称为categories,那么你的模型应该是这样的:

class Category extends AppModel{

}

然后你可以将它包含在:

$this->loadModel('Category');

在 CategoriesController 上你可以这样使用它:

class CategoriesController extends AppController {
    public function index(){
        $this->set('list', $this->Category->find('all'));
    }
}

如果你想为你的表命名,你可以在控制器中使用$useTable变量来指定模型将使用的表的名称。

【讨论】:

    【解决方案3】:

    您也可以使用控制器的$uses 属性:

    public $uses = array('Categorie');
    

    【讨论】:

      猜你喜欢
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      相关资源
      最近更新 更多