【发布时间】:2014-07-08 00:14:17
【问题描述】:
我正在使用 FOSUserBundle 开发 Symfony2.5 项目,我需要添加从同一个注册表单创建用户配置文件的功能。现在我有两个实体SysUsuario 和SysPerfil。这是SysUsuario的代码:
class SysUsuario extends BaseUser
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="SysGrupos")
* @ORM\JoinTable(name="sys_usuarios_grupos",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
protected $groups;
}
这是SysPerfil 的代码(相关部分只是属性):
class SysPerfil
{
/**
* @var integer
*
* @ORM\Column(name="idperfil", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $idperfil;
/**
* @var string
*
* @ORM\Column(name="pers_juridica", type="string", length=1, nullable=false)
*/
protected $persJuridica = 'V';
/**
* @var boolean
*
* @ORM\Column(name="rif", type="boolean", nullable=false)
*/
protected $rif;
/**
* @var boolean
*
* @ORM\Column(name="ci", type="boolean", nullable=false)
*/
protected $ci;
/**
* @var string
*
* @ORM\Column(name="nombre", type="string", length=50, nullable=true)
*/
protected $nombre;
/**
* @var string
*
* @ORM\Column(name="apellido", type="string", length=50, nullable=true)
*/
protected $apellido;
/**
* @ORM\ManyToOne(targetEntity="SysUsuario")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user", referencedColumnName="id")
* })
*/
protected $user;
}
我还创建了两个表单:UsuarioType 和 PerfilType:
UsuarioType
class UsuarioType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->add('perfil', new PerfilType())
->add('email', 'email', array(
'required' => true,
'label' => 'Email',
'trim' => true
))
->add('password', 'password', array(
'required' => true,
'label' => 'Contraseña',
'always_empty' => true
))
->add('confirm', 'password', array(
'required' => true,
'mapped' => false,
'label' => 'Verificar contraseña',
'always_empty' => true
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'data_class' => 'Sunahip\UserBundle\Entity\SysUsuario',
'intention' => 'new_user'
)
);
}
public function getName()
{
return 'user_register';
}
}
PerfilType
class PerfilType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->add('persJuridica', 'choice', array(
'choices' => array('0' => 'V', '1' => 'J'),
'required' => true,
'label' => 'RIF',
'trim' => true
))
->add('rif', 'text', array(
'required' => true,
'label' => false,
'trim' => true
))
->add('ci', 'text', array(
'required' => true,
'label' => 'CI',
'trim' => true
))
->add('nombre', 'text', array(
'required' => true,
'label' => 'Nombre',
'trim' => true
))
->add('apellido', 'text', array(
'required' => true,
'label' => 'Apellidos',
'trim' => true
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'data_class' => 'Sunahip\UserBundle\Entity\SysPerfil',
'intention' => 'new_user_profile'
)
);
}
public function getName()
{
return 'user_profile';
}
}
但是我收到了这个错误:
既不是“perfil”属性也不是“getPerfil()”方法之一, “perfil()”、“isPerfil()”、“hasPerfil()”、“__get()”存在且有 “Sunahip\UserBundle\Entity\SysUsuario”类中的公共访问权限。
我的方法有什么问题?你是怎么做到的?
【问题讨论】:
标签: php symfony fosuserbundle