尝试编辑先前持久的邮件实体时,我会遇到以下错误:
表单的视图数据有望为 arrayAccess的类型标量,数组或实例,但是类代理人的实例__cg __ mail bundle bundle entity entity Dectire。 arrayAccess的实例。
,但有时会出现另一个:
表单的视图数据有望具有标量,数组或 arrayAccess的实例,但是类Mail userBundle entity entity mailuser的实例。您可以通过将" data_class"选项设置为" Mail UserBundle Entity Mailuser",或者添加将Class Mail UserBundle entity Mailuser的实例转换为标量,数组或 ArrayAccess。
基本上,我有3个实体涉及该问题:邮寄义务,邮寄用途和一个部门。
这是我的邮件实体:
<?php
namespace MailBundleEntity;
use DoctrineORMMapping as ORM;
/**
* Mail
*/
class Mail {
/**
* @var integer
*/
private $id;
/**
* @var MailBundleEntityDepartement
*/
private $departement;
/**
* @var MailUserBundleEntityMailUser
*/
private $mailUser;
/**
* @var MailUserBundleEntityMailUser
*/
private $modifUser;
// Some more variables & Getters / Setters
/**
* Get id
*
* @return integer
*/
public function getId() {
return $this->id;
}
/**
* Constructor
*/
public function __construct() {
}
/**
* Set departement
*
* @param MailBundleEntityDepartement $departement
* @return Mail
*/
public function setDepartement(
MailBundleEntityDepartement $departement = null) {
$this->departement = $departement;
return $this;
}
/**
* Get departement
*
* @return MailBundleEntityDepartement
*/
public function getDepartement() {
return $this->departement;
}
/**
* Set mailUser
*
* @param MailUserBundleEntityMailUser $mailUser
* @return Mail
*/
public function setMailUser(
MailUserBundleEntityMailUser $mailUser = null) {
$this->mailUser = $mailUser;
return $this;
}
/**
* Get mailUser
*
* @return MailUserBundleEntityMailUser
*/
public function getMailUser() {
return $this->mailUser;
}
/**
* Set modifUser
*
* @param MailUserBundleEntityMailUser $modifUser
* @return Mail
*/
public function setModifUser(
MailUserBundleEntityMailUser $modifUser = null) {
$this->modifUser = $modifUser;
return $this;
}
/**
* Get modifUser
*
* @return MailUserBundleEntityMailUser
*/
public function getModifUser() {
return $this->modifUser;
}
}
和yml版本(我使用的版本),如果是:
MailBundleEntityMail:
type: entity
table: null
repositoryClass: MailBundleRepositoryMailRepository
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
manyToOne:
departement:
targetEntity: MailBundleEntityDepartement
joinColumns:
departement_id:
referencedColumnName: id
orphanRemoval: false
mailUser:
targetEntity: MailUserBundleEntityMailUser
joinColumns:
mail_user_id:
referencedColumnName: id
orphanRemoval: false
modifUser:
targetEntity: MailUserBundleEntityMailUser
joinColumns:
modif_user_id:
referencedColumnName: id
orphanRemoval: false
lifecycleCallbacks: { }
这是其形式类型:
<?php
namespace MailBundleForm;
use DoctrineORMEntityRepository;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolverInterface;
use SymfonyComponentSecurityCoreSecurityContext;
class MailType extends AbstractType
{
protected $userId;
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$userId = $this->userId;
$builder
// Some other fields ...
->add('departement', 'hidden', array(
'label' => 'Departement',
'required' => false,
'disabled' => true))
->add('mailUser', 'entity', array(
'class' => 'MailUserBundle:MailUser',
'query_builder' => function(EntityRepository $ermu) {
return $ermu->createQueryBuilder('MU')
->orderBy('MU.lastName', 'ASC');
},
'multiple' => false,
'required' => true,
'label' => 'Sender'))
->add('modifUser', 'hidden', array(
'label' => 'Editor'))
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MailBundleEntityMail'
));
}
/**
* @return string
*/
public function getName()
{
return 'mail_bundle_courriertype';
}
public function __construct($userId)
{
$this->userId = $userId;
}
}
为什么在表格中添加部门作为隐藏字段?尝试删除它,因为它不是必需的。您将其设置在您的实体中,并且可以在控制器中设置/操纵它。无需以您的形式拥有它(也许您来自SF1.4?)....