2016-10-20 1 views
2

は、私はいくつかのproudctを編集しようとしているとき、私はのでSymfony 2.8 file uploading "エンティティがArrayAccesを実装していないため、型のオブジェクトからインデックス" ... "を読み込めません。"

インデックスを読み取ることができません。「マルカ」タイプ のオブジェクトから「ShoeShopBundle \エンティティ\ブチル」を取得しています、私のeditActionの問題を持っていますこれは \ ArrayAccessを実装していません。

以前の私は

を得ていたフォームのビューデータがクラス のSymfony \コンポーネント\ HttpFoundation \ファイル\ファイルのインスタンスであることが予想、しかし(n)の文字列です。 は、 "data_class"オプションをnullに設定するか、または (n)文字列をSymfony \ Component \ HttpFoundation \ File \ Fileの インスタンスに変換するビュートランスフォーマーを追加することで、このエラーを回避できます。

エラーので、私はnullにconfigureOptionsdata_classを変更し、すべてのフィールドに'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(); 
} 
} 

誰が間違って何を教えてくださいすることができ、私のエンティティのですか?前もって感謝します。

答えて

1

フォームの'data_class'オプションを適切なクラスに設定する必要があります。それ以外の場合は、Symfonyプロパティのアクセサは配列であるとみなします。

/** 
* @param OptionsResolver $resolver 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => Buty::class 
    )); 
} 
関連する問題