2016-11-22 57 views
0

我在CakePHP 3項目中有一個表單,用於編輯用戶數據。在我的情況下,管理員用戶可以編輯其他用戶的角色。CakePHP 3 - 新實體/ 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。無論給下面的數組:

Array 
(
    [role] => admin 
) 

我用一個自定義的驗證,因爲只有ID和角色需要驗證進行編輯。

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; 
} 

我試着給'edit'驗證器添加更多限制,但是id永遠不會被添加。 '編輯'驗證器正在使用。將validate參數更改爲'default'會給出默認驗證器的所有預期錯誤,但是id仍然不會被添加。

有什麼明顯的我在這裏失蹤?我應該是一些基本的CakePHP的東西。

+3

你烤的編輯操作?你的代碼看起來不像,如果你通常會看到它的工作原理。 get()總是在發佈時加上patchEntity()調用。沒有newEntity()進行編輯。 – mark

+0

我做過烘焙,但是我添加了驗證編輯功能 – 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