IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Systeme de commentaires [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Par défaut Systeme de commentaires
    Bonjour,

    J'aimerais tous simplement mettre des commentaires a mes articles.
    Probleme, je n'arrive pas à configurer correctement cela.
    Ce que je n'arrive pas a comprendre c'est comment récupéré l'id et la catégorie de la news pour les envoyer dans les champs hidden du formulaire ?

    Voici deja mes fichiers :

    BaseCommentForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class BaseCommentForm extends BaseFormDoctrine
    {
      public function setup()
      {
        $this->setWidgets(array(
          'id'          => new sfWidgetFormInputHidden(),
          'article_id'  => new sfWidgetFormDoctrineSelect(array('model' => 'Article', 'add_empty' => false)),
          'content'     => new sfWidgetFormTextarea(),
          'author_id'   => new sfWidgetFormDoctrineSelect(array('model' => 'Author', 'add_empty' => false)),
          'category_id' => new sfWidgetFormDoctrineSelect(array('model' => 'Category', 'add_empty' => false)),
          'email'       => new sfWidgetFormInput(),
          'created_at'  => new sfWidgetFormDateTime(),
          'updated_at'  => new sfWidgetFormDateTime(),
          'slug'        => new sfWidgetFormInput(),
        ));
     
        $this->setValidators(array(
          'id'          => new sfValidatorDoctrineChoice(array('model' => 'Comment', 'column' => 'id', 'required' => false)),
          'article_id'  => new sfValidatorDoctrineChoice(array('model' => 'Article')),
          'content'     => new sfValidatorString(),
          'author_id'   => new sfValidatorDoctrineChoice(array('model' => 'Author')),
          'category_id' => new sfValidatorDoctrineChoice(array('model' => 'Category')),
          'email'       => new sfValidatorString(array('max_length' => 255, 'required' => false)),
          'created_at'  => new sfValidatorDateTime(array('required' => false)),
          'updated_at'  => new sfValidatorDateTime(array('required' => false)),
          'slug'        => new sfValidatorString(array('max_length' => 255, 'required' => false)),
        ));
     
        $this->widgetSchema->setNameFormat('comment[%s]');
     
        $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
     
        parent::setup();
      }
     
      public function getModelName()
      {
        return 'Comment';
      }
    Voici ensuite la version que j'ai faite en configuration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    class CommentForm extends BaseCommentForm
    {
     	public function configure()
      	{
     
    	unset($this['id'], $this['created_at'], $this['updated_at']);
     
      			$this->setWidgets(array(
      			'article_id'	        => new sfWidgetFormInputHidden(),
      			'category_id'	 => new sfWidgetFormInputHidden(),
      			'author_id'	 	 => new sfWidgetFormInputHidden(),
      			'email' 		 => new sfWidgetFormInput(),
      			'content'  		 => new sfWidgetFormTextarea(),
    			));
     			$this->widgetSchema->setNameFormat('comment[%s]');
     
     			$this->setValidators(array(
     			'article_id'	 => new sfValidatorString(array('required' => true)),
     			'category_id'	 => new sfValidatorString(array('required' => true)),
     			'author_id'	 	 => new sfValidatorDoctrineChoice(array('model' => 'author', 'column' => 'id', 'required' => true)),
     			'email'  		 => new sfValidatorEmail(array(),array('invalid' => 'Le format de l\'adresse email n\'est pas valide, veuillez recommencer.')),
     			'content'		 => new sfValidatorString(array('min_length' => 4), array(
     							'required' => 'Vous avez oublié le message.',
     							'min_length' => 'Le message "%value%" doit contenir au moins %min_length% caractères.'
     			 ))));
      	}
     
     
    }
    Mon fichier action.class :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    	public function executeShow(sfWebRequest $request)
    	{
     
    		$this->article = Doctrine::getTable('Article')->find($request->getParameter('id'));
    		$this->forward404Unless($this->article);
    		$this->comment_list = Doctrine::getTable('Comment')->getComment($com = $request->getParameter('id'));
    		$this->comment_form = new BaseCommentForm();
     
    		if ($this->comment_form->isValid())
    		{
    			$this->comment_form->save();
    			$params= array(
    					'comment_email'        => $request->getParameter('comment[email]'),
    					'comment_content'      => $request->getParameter('comment[content]'),
    					'comment_author_id'    => $request->getParameter('comment[author_id]'),
    					'comment_article_id'    => $request->getParameter('comment[article_id]'),
    					'comment_category_id'  => $request->getParameter('comment[category_id]'),
    					);
    			$this->redirect('article/thankyou?'.http_build_query($params));
    		}
    	}
    Et pour finir l'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <!-- Affichage du formulaire de commentaire -->
     
    <form action="<?php echo url_for('@default?module=article&action=show&id='.$article->getId()) ?>" method="POST">
     
    <?php echo $comment_form ?>
     
    </form>

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Par défaut
    Hello,

    Donc dans ta fonction executeShow(
    Tu as ca $this->comment_form = new BaseCommentForm();

    Tu initialise un nouvel object. Tu peux lui appliquer des valeurs par default.
    $this->comment_form->setDefault('tonchamp', value);
    Donc tu fais ca pour les id article, author etc...

    Tu peux aussi remplacer ce code la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $params= array(
    					'comment_email'        => $request->getParameter('comment[email]'),
    					'comment_content'      => $request->getParameter('comment[content]'),
    					'comment_author_id'    => $request->getParameter('comment[author_id]'),
    					'comment_article_id'    => $request->getParameter('comment[article_id]'),
    					'comment_category_id'  => $request->getParameter('comment[category_id]'),
    					);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Par $parem = $this->form_comment->getValues();
    Bon courage
    Tcho

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Par défaut
    Génial merci beaucoup pour l'explication.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Par défaut
    De rien, bon courage par la suite

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] crée un systeme de commentaire facebook/twitter
    Par angefidel dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 30/12/2014, 17h46
  2. faire un systeme de commentaires conversations (requete SQL)
    Par crozet.magenta dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2014, 23h20
  3. Réponses: 0
    Dernier message: 28/05/2012, 03h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo