Symfony2:无法将持久化的对象加载到编辑表单中(表单的视图数据应为标量、数组或 \ArrayAccess 的实例)



尝试编辑先前持久的邮件实体时,我会遇到以下错误:

表单的视图数据有望为 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?)....

最新更新