我想在同一页面中多次使用相同的formType, 所以在我的控制器中我有类似的东西:
$form = $this->createForm(new updateSortieForm(), $sortie);
return $this->render('vue.html.twig,array('form'=>$form));
在我的vue中,我有一个循环,它应该在一个简单的条件下呈现这个形式!
{% if sortie.dateretoueffective == null %}{
{{ form(form,{'action':path('update_sortie',{'idSortie':sortie.idSortie}) })}}}
{% endif %}
问题是我需要多次实例化这个表单,我已经尝试过这个method: 它不起作用,或者我做错了什么,因为我是Symfony的新手!
我的表单类很简单:
class updateSortieForm extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('dateRetouEffective','date',array('label'=>false))
->add('MAJ','submit');
}
public function getName()
{
return 'alfarabiBundle_AlfarabiAppBundle_updateSortie'; }
}
答案 0 :(得分:0)
我不知道其他人如何做到这一点,但我通过自定义TwigExtension解决了这个问题。所以,我创建了一个TwigExtension,注入request_stack
和form.factory
服务,声明为add_to_cart
的功能及其方法,使用FormFactory服务的createNamed
方法创建表单:
自定义TwigExtension:
...
public function getFunctions()
{
return [
new \Twig_SimpleFunction('add_to_cart', [$this, 'getAddToCart']),
];
}
public function getAddToCart(User $user, Product $product)
{
$request = $this->requestStack->getCurrentRequest();
...
$form = $this->formFactory->createNamed('add_to_cart_' . $product->getId(), 'sl_web_product_add_to_cart', null, [
'action' => $this->router->generate($request->attributes->get('_route'), $request->attributes->get('_route_params'))
]);
$form->handleRequest($request);
if ($form->isValid()) {
// some code here
$this->session->getFlashBag()->add('notice', 'MESSAGE');
$response = new Response();
$response
->setStatusCode(200)
->headers->set('Location', $this->router->generate($request->attributes->get('_route'), $request->attributes->get('_route_params')))
;
$response->send();
}
return $form->createView();
}
模板中的用法:
{% set cart_form = add_to_cart(app.user, product) %}
我不是说这是一个很好的解决方案,但你可以玩它并获得一个想法。