单击显示symfony表单

时间:2016-12-26 20:51:05

标签: javascript php jquery symfony

我想制作一个评论部分,我希望有一个动态回复按钮,以便在点击之后,表单显示我要重播的评论下方。我用symfony形式{{render(controller('BlogBundle:Comment:new',{'blog_id' : BlogPost.id }))}}调用一个方法,所以它总是显示在同一个地方。但是当我想重播评论时,我希望能够通过按钮点击显示表单,我可以使用与第一个任务相同的表单来实现吗?因为我需要默认隐藏它。

这是我现在正在调用的控制器,用于显示表单

public function newAction($blog_id)
{
    $comment = new Comment();
    $comment->setBlog($blog_id);
    $form =  $this->createForm(CommentType::class, $comment);

    return $this->render('BlogBundle:Default:form.html.twig',array(
        'form' => $form->createView(),
        'comment' => $comment
        ));
}

这是我的表格

class CommentType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('name')
        ->add('text')
        ->add('send', SubmitType::class, array(
            'attr' => array('class' => 'send')));
    }
}

只是按钮显示我正在做这个

{% for comment in comments %}
    {{comment.name}} <div id = "buttonDisplayForm"><button type="button" class="btn btn-primary">Reply</button></div>
    <p>{{comment.text}}</p>

{% endfor %}

但是我需要通过点击按钮以某种方式在<p>{{comment.text}}</p>下方显示表单。

1 个答案:

答案 0 :(得分:2)

这与Symfony本身无关。正如 @ axel.michel 指出的那样,您可以隐藏表单。

一种方法是在一些隐藏的{{ form_start() }}中包装表单呈现(以{{ form_end() }}开头,以<div>结尾):

<div style="display: none" id="my_form">
    {{ form_start(form) }}
    Rest of your form rendering calls go here...
    {{ form_end(form) }}
</div>

然后,只需要应用类似于第一条评论中建议的 @ axel.michel 的内容。

更新

$(".buttonDisplayForm")
    .on('click', function() { 
        $('#reply_form').append('{{render(controller("BlogBundle:Comm‌​ent:new",{"blog_id‌​": BlogPost.id})) }}')
    });

一些关键点:

  • {{ render }}需要附上引号(在我的情况下,我选择单引号)
  • render操作发生在服务器上,而不是客户端上。如果您真的想使用AJAX,请考虑一下 - BlogPost.id将针对所有请求进行修复。
  • render内,我选择使用双引号,以尽量减少对SymfonyJS
  • 的混淆

希望这会有所帮助......