Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将Symfony表单上的字段绑定到参数_Php_Symfony_Twig - Fatal编程技术网

Php 将Symfony表单上的字段绑定到参数

Php 将Symfony表单上的字段绑定到参数,php,symfony,twig,Php,Symfony,Twig,我有一个花名册实体的新(创建)方法,并希望从另一个服务用户实体导航到此方法,并将服务用户作为参数传递。然后我想将花名册的serviceUserId设置为服务用户对象的ID 我的控制器方法将ok从服务用户实体路由到花名册,并将服务用户对象正确地传递到表单 /** * Creates a new roster entity. * * @Route("/newfromsu/serviceUser={serviceUser}", name="roster_new_su")

我有一个花名册实体的新(创建)方法,并希望从另一个服务用户实体导航到此方法,并将服务用户作为参数传递。然后我想将花名册的serviceUserId设置为服务用户对象的ID

我的控制器方法将ok从服务用户实体路由到花名册,并将服务用户对象正确地传递到表单

/**
     * Creates a new roster entity.
     *
     * @Route("/newfromsu/serviceUser={serviceUser}", name="roster_new_su")
     * @Method({"GET", "POST"})
     */
    public function newActionfromServiceUser(Request $request, ServiceUser $serviceUser)
    {
        $roster = new Roster();
        $form = $this->createForm('AppBundle\Form\RosterType', $roster);
        $form->handleRequest($request);


        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($roster);
            $em->flush($roster);

            return $this->redirectToRoute('roster_show', array('id' => $roster->getId()));
        }

        return $this->render('roster/newfromsu.html.twig', array(
            'roster' => $roster,
            'serviceUser'=>$serviceUser
        ,'form' => $form->createView(),
        ));
    }
新的花名册模板页面和花名册类型类当前由默认使用模板化代码创建

   {% extends '_base.html.twig' %}

{% block body %}
    {{ dump() }}
    <h1>Roster creation</h1>

    {{ form_start(form) }}
    {{ form_widget(form) }}
    <input type="submit" value="Create" />
    {{ form_end(form) }}

    <ul>
        <li>
            <a href="{{ path('roster_index') }}">Back to the list</a>
        </li>
    </ul>
{% endblock %}
我的问题: 如何将新表单中的serviceUserId值设置为传入serviceUser对象的ID

我可以在formBuilder中执行此操作,还是需要手动创建一个细枝表单,列出每个属性并将相关控件绑定到其中


谢谢

Controller::createForm函数的第三个参数是一个带有选项的数组

$form = $this->createForm('AppBundle\Form\RosterType', $roster, array(
    'serviceUser' => $serviceUser
));
现在,在formType类中,您需要为$options['serviceUser']设置一个默认值:

class RosterType extends AbstractType
{

    // ...

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Roster',
            'serviceUser' => NULL
        ));
    }
}
现在您可以使用buildForm方法中的选项:

class RosterType extends AbstractType
{

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('serviceUserId', null, array(
                'data' => $options['serviceUser']
            ))
            ->add('rosterStartTime')
            ->add('rosterEndTime')
            ->add('rosterStatus')
            ->add('numberResourcesNeeded')
            ->add('customerId')
        ;

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Roster',
            'serviceUser' => NULL
        ));
    }
}

非常感谢你,弗兰克,你的回答非常清楚,非常有效!
class RosterType extends AbstractType
{

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('serviceUserId', null, array(
                'data' => $options['serviceUser']
            ))
            ->add('rosterStartTime')
            ->add('rosterEndTime')
            ->add('rosterStatus')
            ->add('numberResourcesNeeded')
            ->add('customerId')
        ;

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Roster',
            'serviceUser' => NULL
        ));
    }
}