2016-01-13 3 views
0

У меня есть внешний интерфейс, чтобы добавить нового пользователя. Кроме того, он должен добавить компанию «Пользователи» в таблицу «Компании» и установить для company_id нового пользователя новый идентификатор компании. На отправке я получаю сообщение об ошибке «Невозможно добавить пользователя».cakephp 3. * save принадлежит данным

(его пользователя объединение 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')))); 
} 

отладке $ this-> request-> возвращает данные:

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 
     ) 

) 

EDIT:

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

Пожалуйста, разместите свой 'UserTable :: validationDefault()'. То же самое для 'Company'. –

+0

И отлаживать возвращаемое значение '$ this-> Users-> save()' ... – ndm

+0

отладка $ this-> Users-> save() просто возвращает false – Ramses

ответ

1

Используйте этот отлаживать ($ user-> ошибки()); чтобы убедиться, что проверка прошла неправильно. Это будет печатать ошибки проверки массива для каждого столбца, если таковые имеются.

+0

спасибо! есть поле «modul», которое не должно быть представлено в Форме. Теперь оно установлено на значение по умолчанию. Итак, все работает отлично – Ramses

Смежные вопросы