フォームから送信されたデータを保存しています。
コントローラーで私がやっている:
$this->User->create();
$this->User->save($this->request->data)
$this->request->data は次のようになります。
'User' => array(
'password' => '*****',
'username' => 'ddddd',
'role' => '256/aa01bdf80d42beb48dd3225acddf447fdd7a39f3',
'parent_id' => '0/b6ba9bd57f6c70cf738891d4c6fac22abed4161d'
)
'role' と 'parent_id' で機能する検証ルールがあり、ロール/親 ID がユーザーがアクセスできる ID の中に含まれていることを確認します。
データが有効な場合、検証によってフィールド値が変更されます。
ビヘイビアーの beforeSave() フィルターでいくつかのツリー フィールドを設定する Tree ビヘイビアーもあります。
$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
変わらない。そして、それが救われていることです。
明らかに、データにアクセスするためのこれらのさまざまな方法の関係を理解していません。3 つのコンテキストでデータに対処するために、さまざまな方法を試しました。
- コントローラ
- モデル
- 行動
$this->User->create($this->request->data);
そして、Controller save() ステートメントの前に試しました。
コントローラーでは、利用可能なデータ配列として私が見ているもの:
- 保存する前に
- $this->request->data = $this->data = フォームからの適切なデータ
$this->User->data = いくつかのデフォルトの未入力の配列
$this->User->create($this->request->data) を使用する場合の保存前
3 つの配列すべてに生のフォーム データが含まれています
いずれの場合も保存後
- $this->request->data = $this->data = 前とまったく同じ
- $this->User->data = 適切にマッサージされたデータ
誰か私を整理できますか?
ドン・ドレイク