2

让我们从我的代码的简化版本开始:

型号: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(); ?>

当我提交表单时,我收到错误Call to a member function save() on a non-object。在我的控制器文件的开头,如果我添加以下一切正常,并且将新行插入到 skus 表中。

public $uses = 'Sku';

如果我使用了所有正确的命名约定,我不应该可以省略前一行吗?此外,如果我按照相同的命名约定将所有文件和类名更改为 Test ,则它可以在没有 $uses 变量的情况下工作。这让我相信我的代码中的其他地方存在某种冲突。关于为什么会发生这种情况或在哪里寻找潜在问题的任何建议?

提前致谢!

4

2 回答 2

1

试试下面的代码,我想,它会工作

型号:Sku.php

class Sku extends AppModel {
  var $name = 'Sku';
}
于 2014-02-14T13:07:16.113 回答
0

编辑:看起来变形器不能将复数变成单数:http://dogmatic69.com/inflector/Skus。因此,要么您必须使用 $uses,要么将规则添加到变形器中。请参阅变形器配置

您没有为 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。

于 2014-02-13T23:27:04.603 回答