我想制作一个评论部分,我希望有一个动态回复按钮,以便在点击之后,表单显示我要重播的评论下方。我用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>
下方显示表单。
答案 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:Comment:new",{"blog_id": BlogPost.id})) }}')
});
一些关键点:
{{ render }}
需要附上引号(在我的情况下,我选择单引号)render
操作发生在服务器上,而不是客户端上。如果您真的想使用AJAX
,请考虑一下 - BlogPost.id
将针对所有请求进行修复。render
内,我选择使用双引号,以尽量减少对Symfony
和JS
希望这会有所帮助......