symfony2多种形式相同的类型

时间:2015-06-04 21:09:44

标签: php forms symfony

我想在同一页面中多次使用相同的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';    }


}

1 个答案:

答案 0 :(得分:0)

我不知道其他人如何做到这一点,但我通过自定义TwigExtension解决了这个问题。所以,我创建了一个TwigExtension,注入request_stackform.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) %}

我不是说这是一个很好的解决方案,但你可以玩它并获得一个想法。