我有一个名单实体的新(创建)方法,并希望从另一个服务用户实体导航到此方法,将服务用户作为参数传递。然后,我想将名单的serviceUserId设置为服务用户对象的ID。
我的控制器方法从服务用户实体路由到名册,并正确地将服务用户对象传递给表单。
/**
* 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(),
));
}
新的名册模板页面和RosterType类目前是使用模板化代码默认创建的
{% 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 %}
和
class RosterType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('serviceUserId')->add('rosterStartTime')->add('rosterEndTime')->add('rosterStatus')->add('numberResourcesNeeded')->add('customerId');
}
我的问题: 如何将新表单中的serviceUserId值设置为传入serviceUser对象的ID
我可以在formBuilder中执行此操作,还是需要手动创建一个Twig表单,该表单列出每个属性并将相关控件绑定在那里。
谢谢!
答案 0 :(得分:3)
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
));
}
}