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