2016-11-22 14 views
0

私のCakePHP 3プロジェクトに、ユーザーデータを編集するフォームがあります。私の場合、管理ユーザーは他のユーザーの役割を編集できます。Cakephp 3 - newEntity/patchEnityが提供IDを使用していません

フォームを投稿するとき(実際のリクエストは編集のために 'PUT')、ユーザーの役割とIDの両方を取得します。

要求データ:

Array 
(
    [role] => admin 
    [id] => 2 
) 

この着信データ完全で正しいです。ただし、 ' - > newEntity'または ' - > patchEntity'のいずれかにデータを追加すると、役割は正しく実行されますが、IDは追加されません。

$user = $this->Users->newEntity($this->request->data, array('validate' => 'edit')); 

$user = $this->Users->newEntity(); 
$user = $this->Users->patchEntity($user, $this->request->data, array('validate' => 'edit')); 

上記のどちらの場合でも、私はロールを取得しますが、idは取得しません。両方とも次の配列を与えます:

私はカスタムバリデーターを使用します。これは、idとroleだけが編集のために検証する必要があるためです。

public function validationDefault(Validator $validator) 
{ 
    $validator 
     ->integer('id') 
     ->allowEmpty('id', 'create'); 

    $validator 
     ->requirePresence('username', 'create') 
     ->notEmpty('username'); 

    $validator 
     ->requirePresence('password', 'create') 
     ->notEmpty('password'); 

    $validator 
     ->allowEmpty('role'); 

    return $validator; 
} 

public function validationEdit(Validator $validator) 
{ 
    $validator 
     ->integer('id') 
     ->requirePresence('id') 
     ->notEmpty('id'); 

    $validator 
     ->allowEmpty('role'); 

    return $validator; 
} 

「編集」バリデーターに制限を追加しようとしましたが、IDは関係なく追加されます。しかし、 'edit'バリデーターが使用されています。 validateパラメータを 'default'に変更すると、デフォルトのバリデータから予想されるすべてのエラーが返されますが、idはまだ追加されません。

ここには何かがありますか?私は基本的なCakePHPのものでなければなりません。

+3

をあなたのeditアクションを焼くましたか?あなたのコードはそれのようには見えません。もしあなたが通常どのように動作するのか分かりますか?投稿時に常にget()とpatchEntity()を呼び出します。編集のためのnewEntity()はありません。 – mark

+0

私はベークしましたが、validationEdit関数を追加しました – DijkeMark

+0

いいえ、またはコードにnewEntity()が存在しませんでした... – mark

答えて

2

あなたがちょうど行うユーザーのロールを編集しようとしている場合は、既存のレコードを編集するためのnewEntityを必要としません:

$user = $this->Users->get($this->request->data['id']); 
    if ($this->request->is(['patch', 'post', 'put'])) { 
     $user = $this->Users->patchEntity($user, $this->request->data); 
     if ($this->Users->save($user)) { 
      // updated 
     } 
    } 
+0

このように働いているようです。どうして私がCakePHPの料理書に従わなかったのか分かりません。 – DijkeMark

関連する問題