带有实体的symfony形式选择得到结果
symfony form choice with entity get result
我正在尝试获取我选择表格的结果。
表格是这样的:
$users = $em->getRepository('UserBundle:User')->findAll();
$form = $this->createFormBuilder($users)
->add('users', 'entity', array(
'label' => 'Pick that user',
'class' => 'UserBundle:User',
'choice_label' => 'usFirstname'))
->add('save', 'submit', array('label' => 'Submit'));
然后我想让用户被选中,我尝试了几种方法,但没有任何效果...
它应该是这样的:
$user_picked =
$em->getRepository('UserBundle:User')->
findBy(array('usFirstname' => $form->getForm()->get('users')->getData()));
单击按钮 'Submit' 后我应该如何选择用户?
表单生成器的魔力可以为您完成这项工作。
如果转储数据 dump($form->get('users')->getData())
它将成为用户在表单中选择的实例。无需进行额外的查询。
此外,choice_label 仅过滤 select 选项文本中的内容,而不是值。
示例;
<?php
namespace AppBundle\Controller;
use AppBundle\Entity\User,
AppBundle\Form\MyFormType;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route,
Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter,
Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\Request,
Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MyController extends Controller
{
public function addAction(Request $request)
{
$form = $this->createForm(new MyFormType(), null, []);
$form->add('submit', 'submit', [
'label' => 'Create',
'attr' => ['class' => 'btn btn-success pull-right']
]
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
dump($form->get('users')->getData());
exit(0);
}
return $this->render('AppBundle:user:form.html.twig', [
'form' => $form->createView()
]
);
}
}
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType,
Symfony\Component\Form\FormBuilderInterface,
Symfony\Component\OptionsResolver\OptionsResolver,
Symfony\Component\Validator\Constraints as Assert;
class MyFormType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('users', 'entity', [
'required' => false,
'class' => 'AppBundle:User',
'choice_label' => 'usFirstname',
'expanded' => false,
'multiple' => false,
]);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => null,
));
}
/**
* @return string
*/
public function getName()
{
return 'my_form';
}
}
我正在尝试获取我选择表格的结果。
表格是这样的:
$users = $em->getRepository('UserBundle:User')->findAll();
$form = $this->createFormBuilder($users)
->add('users', 'entity', array(
'label' => 'Pick that user',
'class' => 'UserBundle:User',
'choice_label' => 'usFirstname'))
->add('save', 'submit', array('label' => 'Submit'));
然后我想让用户被选中,我尝试了几种方法,但没有任何效果... 它应该是这样的:
$user_picked =
$em->getRepository('UserBundle:User')->
findBy(array('usFirstname' => $form->getForm()->get('users')->getData()));
单击按钮 'Submit' 后我应该如何选择用户?
表单生成器的魔力可以为您完成这项工作。
如果转储数据 dump($form->get('users')->getData())
它将成为用户在表单中选择的实例。无需进行额外的查询。
此外,choice_label 仅过滤 select 选项文本中的内容,而不是值。
示例;
<?php
namespace AppBundle\Controller;
use AppBundle\Entity\User,
AppBundle\Form\MyFormType;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route,
Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter,
Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\Request,
Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MyController extends Controller
{
public function addAction(Request $request)
{
$form = $this->createForm(new MyFormType(), null, []);
$form->add('submit', 'submit', [
'label' => 'Create',
'attr' => ['class' => 'btn btn-success pull-right']
]
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
dump($form->get('users')->getData());
exit(0);
}
return $this->render('AppBundle:user:form.html.twig', [
'form' => $form->createView()
]
);
}
}
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType,
Symfony\Component\Form\FormBuilderInterface,
Symfony\Component\OptionsResolver\OptionsResolver,
Symfony\Component\Validator\Constraints as Assert;
class MyFormType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('users', 'entity', [
'required' => false,
'class' => 'AppBundle:User',
'choice_label' => 'usFirstname',
'expanded' => false,
'multiple' => false,
]);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => null,
));
}
/**
* @return string
*/
public function getName()
{
return 'my_form';
}
}