Symfony 2.8 文件上传“无法从类型对象读取索引“...”,因为 Entity 未实现 ArrayAcces。”

2024-01-30

我的 editAction 有问题,当我尝试编辑一些产品时,我得到了

无法从类型的对象读取索引“marka” “ShoeShopBundle\Entity\Buty”,因为它没有实现 \ArrayAccess。

早些时候我得到

表单的视图数据应该是类的实例 Symfony\Component\HttpFoundation\File\File,但是是一个(n)字符串。你 可以通过将“data_class”选项设置为 null 或通过 添加一个视图转换器,将 a(n) 字符串转换为实例 Symfony\Component\HttpFoundation\File\File。

错误,所以我改变了data_class in 配置选项为空并添加'data_class' => 'path_to_entity'到各个领域。这是我的表格:

class ButyType extends AbstractType
{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('marka', ChoiceType::class, array(
            'data_class' => 'ShoeShopBundle\Entity\Buty',
            'choices' => ['Adidas', 'Asics', 'Nike', 'Puma'
            ]
        ))
        ->add('model', TextareaType::class, array(
            'data_class' => 'ShoeShopBundle\Entity\Buty',
        ))
        ->add('kolor', TextareaType::class, array(
            'data_class' => 'ShoeShopBundle\Entity\Buty',
        ))
        ->add('cena', TextareaType::class, array(
            'data_class' => 'ShoeShopBundle\Entity\Buty',
        ))
        ->add('rozmiar', EntityType::class, array(
                'class' => 'ShoeShopBundle:Rozmiar',
                'expanded' => true,
                'multiple' => true,
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('r')
                        ->orderBy('r.rozmiar', 'ASC');
                }, 'choice_label' => 'rozmiar',
            )
        )
        ->add('zdjecie', FileType::class, array(
            'data_class' => 'Symfony\Component\Form\Extension\Core\Type\FileType',
            'property_path' => 'zdjecie',
            'label' => 'Zdjecie (img file)'))
        ->add('zdjecieMIN', FileType::class, array(
            'data_class'=> 'Symfony\Component\Form\Extension\Core\Type\FileType',
            'property_path' => 'zdjecieMIN',
            'label' => 'Zdjecie miniatura (img file)'));
}

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => null
    ));
}

这是我的实体

/**
 * Buty
 *
 * @ORM\Table(name="buty")
 * @ORM\Entity(repositoryClass="ShoeShopBundle\Repository\ButyRepository")
 */
class Buty
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="marka", type="string", length=255)
 */
private $marka;

/**
 * @var string
 *
 * @ORM\Column(name="model", type="string", length=255)
 */
private $model;

/**
 * @var string
 *
 * @ORM\Column(name="kolor", type="string", length=255)
 */
private $kolor;

/**
 * @var int
 *
 * @ORM\Column(name="cena", type="float")
 */
private $cena;

/**
 * @var ArrayCollection
 * @ORM\ManyToMany(targetEntity="Rozmiar")
 * @ORM\JoinTable(
 *     name="buty__rozmiary",
 *     joinColumns={@ORM\JoinColumn(name="buty_id", referencedColumnName="id")},
 *     inverseJoinColumns={@ORM\JoinColumn(name="rozmiar_id", referencedColumnName="id")}
 * )
 */
private $rozmiar;

/**
 * @ORM\Column(type="string")
 *
 * @Assert\NotBlank(message="Dodaj zdjecie miniaturke")
 * @Assert\File(mimeTypes={"image/png", "image/jpeg", "image/jpg",})
 */
private $zdjecieMIN;

public function getZdjecieMIN()
{
    return $this->zdjecieMIN;
}

public function setZdjecieMIN($zdjecieMIN)
{
    $this->zdjecieMIN = $zdjecieMIN;

    return $this;
}

/**
 * @ORM\Column(type="string")
 *
 * @Assert\NotBlank(message="Dodaj zdjecie")
 * @Assert\File(mimeTypes={"image/png", "image/jpeg", "image/jpg",})
 */
private $zdjecie;

public function getZdjecie()
{
    return $this->zdjecie;
}

public function setZdjecie($zdjecie)
{
    $this->zdjecie = $zdjecie;

    return $this;
}

/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}


/**
 * Set marka
 *
 * @param string $marka
 * @return Buty
 */
public function setMarka($marka)
{
    $this->marka = $marka;

}

/**
 * Get marka
 *
 * @return string 
 */
public function getMarka()
{
    return $this->marka;
}

/**
 * Set model
 *
 * @param string $model
 * @return Buty
 */
public function setModel($model)
{
    $this->model = $model;

}

/**
 * Get model
 *
 * @return string 
 */
public function getModel()
{
    return $this->model;
}

/**
 * Set kolor
 *
 * @param string $kolor
 * @return Buty
 */
public function setKolor($kolor)
{
    $this->kolor = $kolor;

}

/**
 * Get kolor
 *
 * @return string 
 */
public function getKolor()
{
    return $this->kolor;
}

/**
 * Set cena
 *
 * @param integer $cena
 * @return Buty
 */
public function setCena($cena)
{
    $this->cena = $cena;

}

/**
 * Get cena
 *
 * @return integer 
 */
public function getCena()
{
    return $this->cena;
}

/**
 * Set rozmiar
 *
 * @param ArrayCollection $rozmiar
 * @return rozmiar
 */
public function setRozmiar($rozmiar)
{
    $this->rozmiar = $rozmiar;
    return $this;

}

/**
 * @return ArrayCollection
 */
public function getRozmiar()
{
    return $this->rozmiar;
}


public function __construct()
{
    $this->rozmiar = new ArrayCollection();
}
}

谁能告诉我出了什么问题吗?提前致谢。


你必须设置'data_class'表单的选项是适当的类,否则 Symfony 属性访问器假定它是一个数组。

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => Buty::class
    ));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 2.8 文件上传“无法从类型对象读取索引“...”,因为 Entity 未实现 ArrayAcces。” 的相关文章