Merci pour ta réponse @kivivi . Il est vrai que je me suis peut être mal exprimé quand à mon besoin.
Enfaite j'ai une relation HasOne entre ma table User et Profil. Dans mon formulaire j'ai des champs de la table User et de la table Profil.
<?= $this->Form->input('profil.name') ?>
<?= $this->Form->input('profil.lastname') ?>
<fieldset>
<label>Born</label>
<?= $this->Form->year('profil.years', ['minYear' => 1967,'maxYear' => date('Y')]);?>
<?= $this->Form->month('profil.months',['monthNames' => false]);?>
<?= $this->Form->day('profil.days');?>
</fieldset>
<?= $this->Form->input('username') ?>
<?= $this->Form->input('password') ?>
Je veux pouvoir rajouter des champs manuellement dans mon controller (rôle, status et born) et ensuite sauvegarder le tout.
j'ai modifié mon code de l'autre fois mais j'ai un problème avec $data['profil']['born']. il me retourne une mauvaise date.
voici mon code
public function signIn(){
if ($this->request->is('post')) {
$users = TableRegistry::get('Users');
$data = $this->request->data();
$data['role'] = 'member';
$data['status'] = false;
// Pour répondre à ta question, j'ai un champs born dans ma table Profil et ce sont les inputs profil.years, profil.months et profil.days qui vont l'alimenter en faisant un
$data['profil']['born'] = $data['profil']['years']['year']."-".$data['profil']['months']['month']."-".$data['profil']['days']['day'];
$user = $users->newEntity($data,[
'associated'=>['Profils']
]);
if ($this->Users->save($user)) {
$this->Flash->success(__('Votre inscription a bien été enregistrer. Veuillez tchecker vos mails.'));
return $this->redirect($this->referer());
}
$this->Flash->error(__('Impossible de vous enregistrer.'));
}
}
NB : j'ai lu dans la doc qu'on pouvait utiliser l'événement Model.beforeMarshal pour modifier les données requêtées
public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options)
{
if (isset($data['years']) && isset($data['months']) && isset($data['days'])) {
$data['born'] = $data['years']['year'].'-'.$data['months']['month'].'-'.$data['days']['day'];
}
}
mais pareil cette fonction me retourne une mauvaise date.
Voilà j'espère avoir été plus clair.