我试图实现一个一对一的关系。每个用户都可以在一个建筑中受到影响(对我来说是建立)。一栋楼里可以有很多人,但每个人最多只能在一栋楼里受到影响。
我有这个错误:
contextroreexception: Catchable Fatal Error:参数1传递给Intranet'UserBundle'Entity'User::setUserEtab()必须是Intranet'RhBundle'Entity' etabisement的一个实例,数组给定,在C:'wamp'www' project 'vendor'symfony'symfony'src' symfony' Component'PropertyAccess'PropertyAccessor.php中360行调用,并在C:'wamp'www' project 'src'Intranet'UserBundle'Entity'User.php行322中定义
User.php的第322行是:
public function setEtablissement('Intranet'RhBundle'Entity'Etablissement $etablissement = null)
它发生在我的控制器的$form->handleRequest($request);
行。这是我的控制器:
public function editerAction(Request $request, User $user){
$form = $this->createForm(new EditerFormType, $user);
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
die("ici");
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$this->get('session')->getFlashBag()->add('success', "L'utilisateur ". $user->getNom() ." ". $user->getPrenom() . " a été édité avec succès !");
$em->flush();
return $this->redirect($this->generateUrl('intranet_rh_homepage'));
}else
$this->get('session')->getFlashBag()->add('danger', "Erreur de formulaire !");
}
return $this->render('IntranetRhBundle:User:editer.html.twig',array('user' => $user, 'form' => $form->createView()));
}
骰子不工作。在添加表单之前,它是工作的。
这是EditForm:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle'))
->add('nom', 'text')
->add('prenom', 'text')
->add('naissance','date',array(
'widget' => 'single_text',
'format' => 'dd/MM/yyyy',
'attr' => array('class' => 'date', 'readonly' => 'readonly')
))
->add('sexe', 'choice', array(
'choices' => array('Homme' => 'Homme', 'Femme' => 'Femme'),
'multiple' => false
))
->add('etablissement', new UserEtabType())
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array('data_class' => 'Intranet'Userbundle'Entity'User'));
}
这是我的usertab表单:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('etablissement', 'entity', array('class' => 'IntranetRhBundle:Etablissement', 'property' => 'nom', 'empty_value' => 'Aucun', 'empty_data' => -1, 'required' => false))
;
}
And my relation on User entity:
/**
* @ORM'OneToOne(targetEntity="Intranet'RhBundle'Entity'Etablissement", cascade={"persist", "remove"})
**/
private $etablissement;
表单的视图是好的,有一个选择列表与所有的建筑和一个空值。但是当我发帖时,我有这个错误,我无法理解和解决。
我有setter和getter如果User entity:
/**
* Set Etablissement
*
* @param 'Intranet'RhBundle'EntityEtablissement $etablissement
* @return User
*/
public function setEtablissement('Intranet'RhBundle'Entity'Etablissement $etablissement = null)
{
$this->etablissement = $etablissement;
return $this;
}
/**
* Get Etablissement
*
* @return 'Intranet'RhBundle'Entity'Etablissement
*/
public function getEtablissement()
{
return $this->etablissement;
}
但当我var_dump
$request->get('user')->get('etablissement')
它不工作:
错误:调用未定义方法Intranet'UserBundle'Entity'User::get()在C:'wamp'www' project 'src'Intranet'RhBundle'Controller'UserController.php行69
$request->get('user')
的var_dump
中没有出现该建筑。
我的UserEtabType没有setDefaultOptions方法因为我不知道我要做什么。我试图实现它,但我有这样的错误:
表单的视图数据应该是类Intranet'UserBundle'Entity'User的一个实例,但是它是类proxes__cg__ 'Intranet'RhBundle'Entity'Etablissement的一个实例。您可以通过将"data_class"选项设置为null或添加一个视图转换器来避免此错误,该视图转换器将类proxes__cg__ 'Intranet'RhBundle'Entity'Etablissement的实例转换为Intranet'UserBundle'Entity'User的实例。
对于新的UserEtabType:
namespace Intranet'UserBundle'Form'Type;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'OptionsResolver'OptionsResolverInterface;
class UserEtabType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('etablissement', 'entity', array('class' => 'IntranetRhBundle:Etablissement', 'property' => 'nom', 'empty_value' => 'Aucun', 'empty_data' => -1, 'required' => false))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array('data_class' => 'Intranet'UserBundle'Entity'User'));
}
public function getName()
{
return 'intranet_userbundle_useretablissementtype';
}
}
可以显示新的UserEtabType()类吗?
EDIT 1:试着输入这一行:
->add('etablissement', 'entity', array('class' => 'IntranetRhBundle:Etablissement', 'property' => 'nom', 'empty_value' => 'Aucun', 'empty_data' => -1, 'required' => false));
在主EditForm
编辑2 :另外要小心:
$resolver->setDefaults(array('data_class' => 'Intranet'UserBundle'Entity'User'));
必须是
$resolver->setDefaults(array('data_class' => 'Intranet'UserBundle'Entity'Etablissement'));
在UserEtabType()
类
当您尝试插入记录时是否会出现此错误?或者在那之前。请注意,由于一对一的关系,User实体中的setUserEtab()需要一个etablisement对象。传递数组的值是不够的。尝试将创建的对象传递给它自己(执行dql后选择的对象)。
希望这能帮助到一些人。
干杯!