让我们从我的代码的简化版本开始:
模型:Sku.php
class Sku extends AppModel {
}
控制器:SkusController.php
class SkusController extends AppController {
public function admin_add() {
$this->layout = 'admin';
if($this->request->is('post')) {
if($this->Sku->save($this->request->data)) {
// Do stuff
}
else // Do stuff
}
}
}
查看:Skus> admin_add.ctp
<?php echo $this->Form->create('Sku', array('type'=>'file')); ?>
<?php echo $this->Form->input('Sku.item_no')); ?>
<?php echo $this->Form->input('Sku.size'); ?>
<?php echo $this->Form->input('Sku.color'); ?>
<button type="submit">Save SKU</button>
<?php echo $this->Form->end(); ?>
当我提交表单时,我收到错误在非对象上调用成员函数save()。在我的控制器文件的开头,如果我添加以下内容,一切正常,并在skus表中插入一个新行。
public $uses = 'Sku';
如果我已经使用了所有正确的命名约定,我不能省略前一行吗?此外,如果我按照相同的命名约定将所有文件和类名更改为Test,则它不使用$ uses变量。这让我相信我的代码中的其他地方存在某种冲突。关于为什么会发生这种情况或在哪里寻找潜在问题的任何建议?
提前致谢!
答案 0 :(得分:1)
尝试以下代码,我认为,它会起作用
模型:Sku.php
class Sku extends AppModel {
var $name = 'Sku';
}
答案 1 :(得分:0)
编辑:看起来变形器无法将复数变为单数:http://dogmatic69.com/inflector/Skus。因此,您必须使用$ uses或将规则添加到变形器。 See the inflector configuration
您没有为Controller :: $ uses属性使用数组或布尔值。
public $uses = 'Sku';
应该是:
public $uses = array('Sku');
实际上,如果控制器和模型符合惯例,则根本不必定义它。
阅读文档http://api.cakephp.org/2.4/class-Controller.html# $ uses
$uses
一个数组,包含此控制器的模型的类名 使用示例:
public $uses = array('Product', 'Post', 'Comment');
可以设置为多个值来表达不同的选项:
- true使用默认的变形型号名称。
- array()仅使用父类中定义的模型。
- false根本不使用任何模型,也不要与父类合并。
- array('Post','Comment')仅使用Post和Comment模型。模型也将与父类合并。
默认值为true。