我正在保存从表单发送的数据。
在我正在做的控制器中:
$this->User->create();
$this->User->save($this->request->data)
$ this-> request->数据如下所示:
'User' => array(
'password' => '*****',
'username' => 'ddddd',
'role' => '256/aa01bdf80d42beb48dd3225acddf447fdd7a39f3',
'parent_id' => '0/b6ba9bd57f6c70cf738891d4c6fac22abed4161d'
)
有一些验证规则适用于'role'和'parent_id',以确保角色/父ID是用户可以访问的。
如果数据有效,验证会更改字段值。
我还有一个Tree行为,即在行为中的beforeSave()过滤器中设置一些树字段。
验证规则是将更改写入$this->data->[$model][$field]
,如下所示。
public function checkListHash($check, $field) {
$explodedCheck = explode('/', $check[$field]);
if ($this->secureId($explodedCheck[0], $explodedCheck[1])) {
$this->data['User'][$field] = $explodedCheck[0];
return true;
}
return false;
}
行为中的beforeFilter()正在使用如下语句更改数据数组:
$Model->data[$Model->alias][$ancestors] = $ancestorList;
验证和beforeFilter()处理完成后,我在$this->User->data
有一个漂亮而正确的数据数组,如下所示:
'User' => array(
'password' => '*****',
'active' => '0',
'role' => '256',
'parent_id' => '0',
'node' => '0',
'username' => 'ddddd',
'modified' => '2013-09-15 09:55:02',
'created' => '2013-09-15 09:55:02',
'ancestor_list' => ',0,'
)
但是,$this->request->data
没有变化。这就是拯救的目的。
显然,我不了解这些获取数据的各种方式之间的关系。我已经尝试了多种方法来解决三种情况下的数据:
我在Controller save()语句之前尝试了$this->User->create($this->request->data);
。
在控制器中,我看到的是可用的数据阵列:
$ this-> User-> data =某些默认的,无人居住的数组
在我使用$ this->用户 - >创建($ this-> request-> data)
所有三个数组都包含原始表单数据
在任何一种情况下保存
任何人都可以解雇我吗?
Don Drake
答案 0 :(得分:1)
只是为了向您解释数据数组,当您提交表单时,来自它的数据存储在控制器上的$this->request->data
中。然后,您将从模型内部修改$this->User->data
,这是模型本身的不同数组。它不会影响$this->request->data
,因为它是一个完全不同的数组,属于控制器,模型不知道它。
然后使用请求数据保存用户模型,该数据在提交表单时保持不变。这是合乎逻辑且正常的行为,因为您实际上并未使用已修改的$this->User->data
数组。
您的保存可能始终失败,因为模型试图保存的数据不是更新的数据,而只是来自$this->request->data
的基本数据。
试试这个:
$this->User->set($this->request->data);
$this->User->save();
此外,如果您在模型中使用beforeSave
,请确保该方法返回true
,否则它将永远不会保存。