0

我正在保存从表单发送的数据。

在我正在做的控制器中:

$this->User->create();
$this->User->save($this->request->data)

$this->request->data 看起来像这样:

'User' => array(
    'password' => '*****',
    'username' => 'ddddd',
    'role' => '256/aa01bdf80d42beb48dd3225acddf447fdd7a39f3',
    'parent_id' => '0/b6ba9bd57f6c70cf738891d4c6fac22abed4161d'
)

有适用于“角色”和“父 ID”的验证规则,以确保角色/父 ID 在用户可以访问的范围内。

如果数据有效,验证会更改字段值。

我还有一个树行为,它在行为的 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不变。这就是被拯救的东西。

显然,我不了解这些获取数据的各种方式之间的关系。我尝试了多种方法来处理三种上下文中的数据:

  • 控制器
  • 模型
  • 行为

$this->User->create($this->request->data);在 Controller save() 语句之前尝试过。

在控制器中,我看到的可用数据数组:

  • 保存前
  • $this->request->data = $this->data = 表单中的正确数据
  • $this->User->data = 一些默认的、未填充的数组

  • 在我使用 $this->User->create($this->request->data) 时保存之前

  • 所有三个数组都包含原始表单数据

  • 在任何一种情况下保存后

  • $this->request->data = $this->data = 和以前一样
  • $this->User->data = 正确处理的数据

谁能帮我解决?

唐·德雷克

4

1 回答 1

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在模型中使用 a ,请确保该方法返回true,否则它将永远不会真正继续保存。

于 2013-09-16T15:09:39.297 回答