2015-11-16 1 views
0

Dans mon projet, j'ai deux entités. Postez et commentez.Définition d'un champ à l'entité dans le formulaire Symfony

entité Comment a des champs suivants

  • Nom
  • un message
  • poste

Je forme le rendu de commentaires juste après après. Actuellement, sous forme de commentaire, je reçois un menu déroulant à partir de laquelle je peux sélectionner un poste. Je ne fais pas ça. Je veux définir le champ de poste à une valeur par défaut qui est la même que la publication rendue ci-dessus. Et ça ne devrait pas être changeable.
Comment puis-je obtenir ce comportement?

MISE À JOUR

Je code suivant dans mon contrôleur $ commentaire = new Commentaire();

$comment -> setPost($entity); 
$commentForm = $this -> createCommentForm($comment); 
return array(
    'entity'  => $entity, 
    'delete_form' => $deleteForm->createView(), 
    'comment_form' => $commentForm->createView() 
); 

Dans ce code, je définis la valeur de la valeur, qui est la valeur par défaut de la forme, mais elle est modifiable.

Je crée la forme en utilisant le code suivant:

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
    $builder 
    ->add('name') 
    ->add('reference') 
    ->add('post','entity', array(
     'class' => 'OpenSourceFeedBundle:Post', 
     'required' => TRUE 
    )) 
    ->add('date', 'date', array(
     'html5' => TRUE, 
     'widget' => 'single_text', 
     'read_only' => TRUE 
    )) 
    ->add('message') 
    ; 
    } 
+0

Comment est-il réellement modifiable? Je ne vois pas un champ dans votre formulaire de commentaire qui gère cette liste déroulante pour la publication. Dans ce cas, vous ne devriez voir aucune liste déroulante dans le formulaire de commentaire, ce qui signifie que vous ne pouvez pas le modifier. –

+0

@ MichalTakáč. Oh pardon. J'avais un champ là-bas. Juste enlevé cela à des fins expérimentales. S'il vous plait verifiez maintenant. – niyasc

+0

Donc, tout ce dont vous avez besoin est d'enlever ce champ je suppose et vous devriez aller bien non?vous ne serez pas en mesure de changer le poste dans le formulaire de commentaire et vous aurez votre message mis au commentaire, non? :) –

Répondre

0

Vous devez configurer la valeur $ commentaire de poste dans le contrôleur. Pouvez-vous me montrer votre post/show action de votre contrôleur Post?

Fondamentalement, vous devez action show du poste, dans votre contrôleur que vous avez objet de poste disponible, donc lorsque le déclencheur de poste vous devez faire quelque chose comme ça

$comment = new Comment(); 
$comment->setPost($post); 

puis faire ce que vous devez faire, comme vider le commentaire dans la base de données.

Dans twig, vous ne devez pas afficher cette partie avec une liste déroulante.

Si vous serez en mesure de coller la brindille et le contrôleur, je vais vous montrer la solution.

+0

J'ai une question mise à jour. Jetez un coup d'oeil s'il vous plait. J'ai déjà essayé de définir des valeurs pour poster comme vous l'avez dit. Il définit la publication donnée comme valeur par défaut. Mais encore c'est changeable. – niyasc

0

Essayez this

Type désactivé

: booléen Valeur par défaut: false

Si vous ne voulez pas un utilisateur de modifier la valeur d'un champ, vous pouvez définir l'option désactivée à vrai. Toute valeur soumise sera ignorée.

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
    $builder 
    ->add('name') 
    ->add('reference') 
    ->add('post','entity', array(
     'class' => 'OpenSourceFeedBundle:Post', 
     'required' => TRUE, 
     'disabled' => true, 
    )) 
    ->add('date', 'date', array(
     'html5' => TRUE, 
     'widget' => 'single_text', 
     'read_only' => TRUE 
    )) 
    ->add('message') 
    ; 
    } 
+0

En format html si nous désactivons un champ, il ne sera pas envoyé avec le formulaire. Dans ce cas, je n'aurai aucune valeur pour la poste, quand je soumets le formulaire. – niyasc