CakePHP 3,非常基本保存不起作用

时间:2016-03-03 07:03:36

标签: cakephp-3.0

由于某种原因,$this->request->data到实体的自动转换无效。我创建了一个非常基本的保存以便测试它。

$users = TableRegistry::get('VendorName/Users.Users');
$this->request->data = ['username' => 'someting', 'password' => 'somethingelse'];
$user = $users->newEntity($this->request->data);
if ($users->save($user)) { }

这是产生::

的SQL
INSERT INTO users (created, modified, id) VALUES (:c0, :c1, :c2)

我尝试将$this->request->data作为一个函数,例如。 $this->request->data()

我已尝试明确添加实体值。例如。 $user->username = 'someting';当我这样做时它会起作用。但是,当然,我不想在每个保存函数中明确说明每个字段,那么为什么$this->request->data不能自动转换?

这是$user的样子

object(VendorName\Users\Model\Entity\User) {

    '[new]' => true,
    '[accessible]' => [],
    '[dirty]' => [],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'VendorName/Users.Users'

}

1 个答案:

答案 0 :(得分:2)

问题在于,您已通过在实体类中protected $_accessible = [];VendorName\Users\Model\Entity\User)指定不允许批量指定实体中的任何字段(请参阅http://book.cakephp.org/3.0/en/orm/entities.html#mass-assignment

听起来你希望所有属性都是可分配的,所以你可能想要的是protected $_accessible = ['*' => true];

请注意,这很危险,因为它可以允许任何人稍微改变其形式,然后修改任何其他实体。更好的设置是protected $_accessible = ['id' => false, '*' => true];