在Symfony表单中将字段设置为实体

时间:2015-11-16 16:44:14

标签: php forms symfony

在我的项目中,我有两个实体。发表和评论。

Comment实体有以下字段

  • 名称
  • 消息

我正在发布评论表。现在以评论形式,我得到一个下拉菜单,我可以从中选择一个帖子。我不是那个。我想将post字段设置为默认值,该默认值与上面呈现的帖子相同。它不应该是可变的。
我怎样才能实现这种行为?

更新

我的控制器中有以下代码     $ comment = new Comment();

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

在这段代码中,我正在设置post value,它在表单中作为默认值,但它是可更改的。

我正在使用以下代码创建表单:

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')
    ;
  }

2 个答案:

答案 0 :(得分:0)

您应该在控制器中设置评论$ post值。你能告诉我你的Post控制器的发布/显示动作吗?

基本上你有帖子的显示动作,在你的控制器中你有可用的帖子对象,所以当你触发后你应该做这样的事情

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

然后执行您需要执行的操作,例如刷新对数据库的注释。

在树枝中,您不应该使用下拉列表显示该部分。

如果您能够粘贴树枝和控制器,我会向您展示解决方案。

答案 1 :(得分:0)

尝试this

  

禁用

     

type:boolean default:false

     

如果您不希望用户修改字段的值,您可以进行设置   禁用选项为true。任何提交的值都将被忽略。

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')
    ;
  }