如何将值传递给Symfony2中的表单生成器?

时间:2013-09-29 17:36:51

标签: forms symfony

我正在使用表单构建器来创建在应用程序中使用的表单。在表单中,用户需要能够选择与其关联的事件列表。但是,我无法弄清楚我是如何将用户的ID传递给表单构建器的?

我的代码目前是这样的:

EvType.php

<?php
// src/Acme/MembersBundle/Form/Type/EvType.php
// This is to handle forms for the Members Form
namespace Acme\MembersBundle\Form;

use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class EvType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $centre = $this->centre;

        $builder->add('id', 'integer', array('required'=>false));
        $builder->add('list','entity', array('class'=>'Acme\InstructorBundle\Entity\MapLists', 'property'=>'name',
                                                        'query_builder' => function(EntityRepository $br) {
                                                            return $br->createQueryBuilder('ml')
                                                                ->where('ml.user = :user')
                                                                ->setParameter('user','1' );
                                                        }));
        $builder->add('eventHorse', 'text', array('required'=>false));
    }

    public function getName()
    {
        return 'ev';
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class'      => 'Acme\InstructorBundle\Entity\MapListCentreMembers',
            'csrf_protection' => false,
            'csrf_field_name' => '_token',
            // a unique key to help generate the secret token
            'intention'       => 'task_item',
        ));
    }

}

->setParameter('user','1' );是我希望能够从表单传递用户ID的地方。现在,我已经静态分配了用户ID。

DefaultController.php

// User ID
$userid = $mem['userID'];

// Get Tests from Entity for Form use
$memberEV = $dm->getRepository('InstructorBundle:MapListMembers')->find($memberint);

// Generate Form to edit Tests & Achievements
$ev = $this->createForm( new EvType(), $memberEV);

1 个答案:

答案 0 :(得分:9)

你可以简单地在__construct中传递一个值。

见下文:

<强> EvType.php

class EvType extends AbstractType
{
    private $user;

    public function __construct($user)
    {
        $this->user = $user;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
         $user = $this->user;
         ....
    }

<强> DefaultController.php

$ev = $this->createForm( new EvType($user), $memberEV);