Bonjour, je rencontre un souci étrange. J'ai un formulaire qui me permet d'envoyer des commentaires avec un textarea et un champs caché (parent_id) - Dans mon controller, j'utilise ce code pour enregistrer le commentaire déposé. En local avec Wamp tout se passe bien, sur OVH, l'entrée est bien sauvegardée mais ne prend pas en compte le champs parent_id.
Est-ce que je fais une erreur dans ma fonction save ?
$this->request->data['Comment']['user_id'] = $this->Auth->user('id');
$this->request->data['Comment']['post_id'] = $post['Post']['id'];
$this->Post->Comment->create($this->request->data, true);
if($this->Post->Comment->save(null, true, array('user_id', 'content','post_id', 'parent_id'))) {
$this->Session->setFlash('<strong>Bravo</strong>, votre réponse a bien été postée', 'ok');
$this->redirect($this->referer());
$this->request->data = array();
} else {
$this->Session->setFlash('Vous devez entrez un message', 'ko');
}
J'ai modifié l'appellation du champs au cas où Cake l'interpreterai comme une clé étrangère, ce n'est plus parent_id, mais parentid . En faisant un debug de $this->request->data (juste avant l'enrgistrement avec le create puis le save, la valeur du champs passe bien, c'est donc à l'étape du save qu'il y a un problème puisque la valeur de parentid n'est pas enregistrée en bdd. Là ça reste un mystère pour moi ...
Si quelqu'un comprend où il y a un problème , je suis preneur :) (Je reprécise que l'enregistrement du champs se passe correctement sur Wamp et pas sur OVH avec le même code.)
Le résultat du debug lors de l'envoi d'un commentaire :
array(
'Comment' => array(
'content' => 'testdebug',
'parentid' => '18',
'user_id' => '1',
'post_id' => '40'
)
)
Le Controller :
$this->request->data['Comment']['user_id'] = $this->Auth->user('id');
$this->request->data['Comment']['post_id'] = $post['Post']['id'];
$this->Post->Comment->create($this->request->data, true);
debug($this->request->data); die();
if($this->Post->Comment->save(null, true, array('user_id', 'parentid' ,'content','post_id'))) {
$this->Session->setFlash('<strong>Bravo</strong>, votre réponse a bien été postée', 'ok');
$this->redirect($this->referer());
$this->request->data = array();
Le formulaire HTML de l'ajout de commentaires (généré par le helper Form) :
<form accept-charset="utf-8" method="post" id="CommentShowForm" action="/tutoriels/reseaux-sociaux/installer-un-call-to-action-sur-votre-fanpage-40">
<div style="display:none;"><input type="hidden" value="POST" name="_method"></div><div class="input textarea required">
<textarea required="required" id="CommentContent" rows="6" cols="30" placeholder="Votre commentaire..." class="form-control" name="data[Comment][content]"></textarea>
</div>
<input type="hidden" id="CommentParentid" value="18" class="form-control" name="data[Comment][parentid]"><input type="submit" value="Envoyer" class="btn-secondary mega-btn-secondary">
</form>
A n'y rien comprendre... Après avoir mis le debug à 2 en ligne pou voir si les données passaient (voir le résultat ok du debug au dessus) , l'enregistrement est passé en BDD ... je n'ai rien touché d'autre et ça fonctionne. Merci quand même de ton intervention Yentia ;) Je passe le sujet en résolu.
Oui parfois il faut passé le debug a 2 et le remettre a 0 lorsque l'on heberge sont site je ne sais pas pourquoi.
Cependant n'hesite pas a debug comme tu as fais c'est la bonne solution.
Bonne continuation
Ok @yentia. Voilà ce que donne en HTML le formulaire (généré par CakePhp avec le helper Form) :
<form accept-charset="utf-8" method="post" id="CommentShowForm" action="/BOOSTY-v1.1/tutoriels/ifttt/automatisez-vos-reseaux-sociaux-15" style="display: block;">
<div style="display:none;"><input type="hidden" value="POST" name="_method"></div>
<div class="input textarea required"><textarea required="required" id="CommentContent" rows="6" cols="30" placeholder="Votre commentaire..." class="form-control" name="data[Comment] [content]"></textarea></div>
<input type="hidden" id="parent_id" value="58" class="form-control" name="data[Comment][parent_id]">
<input type="submit" value="Envoyer" class="btn-secondary mega-btn-secondary">
</form>
Ah sérieux ? Je ne connais pas ce "truc" qui relève plus de la magie :) Merci de l'info Yentia. Si j'ai le même souci, je m'en souviendrai.
Oui je me sers du debug dès que je peux, mais je suis un peu long à la détente parfois :)
Merci en tout cas. A plus sur Grafikart ;)