Symfony:如何传递非实体变量到form



我有一个从三个实体收集数据的表单。我收集的数据,并希望其中一些填写在提交的表格。这一切都很好,我甚至可以将数据传递给控制器但我有一个实体,它不包含数据我只是试图将其用作段落标签,但不想持久:

members.php(实体)

/**
 * @var integer
 */
private $orgId;
/**
 * @var integer
 */
private $personId;

/**
 * @var string
 */
private $title;
/**
 * @var integer
 */
private $rank;
/**
 * @var integer
 */
private $myMemberId;

所以我想显示人员的姓名和组织名称而不是$personId和$orgId。所以我想我也可以传递它们,并在段落标签中显示它们,但我不知道如何传递它们。以下是我的文件:

membersController.php

 public function mynewAction(Request $request)
{
    $data = $request->get("companynameofbundle_jquery");
    $entity = new Members();
    $entity->setOrgId($data['orgid']);
    $entity->setPersonId($data['personId']);
    //var_dump($request); shows organization name and person name
    //need to pass person name and organization name to edit form just to display
    $form   = $this->createCreateForm($entity);
    return array(
        'entity' => $entity,
        'form'   => $form->createView(),
    );
}

我确实考虑过重新查找值,但当我已经拥有值并且不需要所有其他数据或开销时,似乎更多的数据库工作。

认为for可能有帮助:

class MemberType extends AbstractType
{

 /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            //Would like person name and organization name instead of id's
            ->add('orgId', 'hidden')
            ->add('personId', 'hidden')
            ->add('title')
            ->add('rank')
        ;
    }
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'CompanyNameofBundleEntityOrgMember'
        ));
    }
    /**
     * @return string
     */
    public function getName()
    {
        return 'company_nameofbundle_orgmember';
    }
}

您可以使用mapped => FALSE添加额外的字段。

->add('apple', 'text', array('mapped' => false))
->add('banana', 'hidden', array('mapped' => false))

在控制器中,您可以像这样从字段中检索提交的数据:

$form->handleRequest($request);
$data = $form->get('apple')->getData(); // after handleRequest() !

最新更新