2016-01-13 102 views
0

我有一个前端形式来添加一个新的用户。另外,它应该将Users Company添加到Companies表中,并将新用户的company_id设置为新的Companys ID。提交时,我收到一条错误“无法添加用户”。cakephp 3. *保存belongsTo数据

(其用户属于关联公司协会)

在UsersController.php:

public function add() 
{ 
    $this->viewBuilder()->layout('login'); 
    $user = $this->Users->newEntity($this->request->data,['associated' => ['Companies']]); 
    if ($this->request->is('post')) { 
     $user = $this->Users->patchEntity($user,['associated' => ['Companies']]); 
     if ($this->Users->save($user)) { 
      $this->Flash->success(__('The user has been saved.')); 
      return $this->redirect(['action' => 'login']); 
     } 
     $this->Flash->error(__('Unable to add the user.')); 
    } 
    $this->set('user', $user); 

    $this->loadModel('Companies'); 
    $this->set('companies', $this->Companies->find('all',array('fields'=>array('name','id')))); 
} 

的$这 - 调试>请求 - >数据返回:

Array 
(
    [username] => the name 
    [email] => [email protected] 
    [password] => test 
    [company] => Array 
     (
      [name] => comanysnametest 
      [iban] => DE02 520934 5 02384 
      [bic] => Genoht 034 
      [kontoinhaber] => the name here 
      [straße] => alphastr 
      [hausnummer] => 1337 
      [plz] => 46467 
      [ort] => Supp 
      [geschäftsführung] => another name 
      [vat] => 038u pwdf8a spdf 
     ) 

) 

编辑:

的UsersTable :: validationDefault:

public function validationDefault(Validator $validator) 
{ 
    $validator 
     ->add('id', 'valid', ['rule' => 'numeric']) 
     ->allowEmpty('id', 'create'); 

    $validator 
     ->add('email', 'valid', ['rule' => 'email']) 
     ->requirePresence('email', 'create') 
     ->notEmpty('email') 
     ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); 

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

    $validator 
     ->requirePresence('username', 'create') 
     ->notEmpty('username') 
     ->add('username', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); 

    $validator 
     ->allowEmpty('role'); 

    return $validator; 
} 

的CompaniesTable :: validationDefault

public function validationDefault(Validator $validator) 
{ 
    $validator 
     ->add('id', 'valid', ['rule' => 'numeric']) 
     ->allowEmpty('id', 'create'); 

    $validator 
     ->requirePresence('name', 'create') 
     ->notEmpty('name') 
     ->add('name', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); 

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

    $validator 
     ->allowEmpty('iban'); 

    $validator 
     ->allowEmpty('bic'); 

    $validator 
     ->allowEmpty('kontoinhaber'); 

    $validator 
     ->requirePresence('straße', 'create') 
     ->notEmpty('straße'); 

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

    $validator 
     ->add('plz', 'valid', ['rule' => 'numeric']) 
     ->requirePresence('plz', 'create') 
     ->notEmpty('plz'); 

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

    $validator 
     ->requirePresence('geschäftsführung', 'create') 
     ->notEmpty('geschäftsführung'); 

    $validator 
     ->allowEmpty('vat'); 

    return $validator; 
} 
+0

请发布您的'UsersTable :: validationDefault()'。 “公司”一样。 –

+0

调试'$ this-> Users-> save()'的返回值... – ndm

+0

$ this-> Users-> save()的调试只返回false – Ramses

回答

1

使用此调试($用户>错误());看看验证是否出错。这将打印出每列的数组验证错误(如果有的话)。

+0

谢谢!有“模块”字段不应在表单中表示。现在它被设置为默认值。所以一切正常 – Ramses