你好,我正在尝试使用Annance和一些图像之间的oneToMany关系上传文件;因此,一个注释可以包含0个或多个图像,并且一个图像仍然附加到一个注释。我认为我的实体一切都可以,但我在提交表格时遇到了这个错误。
> Annonce.php
<?php
namespace MDB'AnnonceBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Doctrine'Common'Collections'ArrayCollection;
/**
* Annonce
*
* @ORM'Table()
* @ORM'Entity(repositoryClass="MDB'AnnonceBundle'Entity'AnnonceRepository")
*/
class Annonce {
public function __construct() {
$this->date = new 'Datetime();
$this->categories = new ArrayCollection();
$this->images= new ArrayCollection();
}
/**
* @var integer
*
* @ORM'Column(name="id", type="integer")
* @ORM'Id
* @ORM'GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM'Column(name="titre", type="string", length=255)
*/
private $titre;
/**
* @var string
*
* @ORM'Column(name="description", type="string", length=255)
*/
private $description;
/**
* @ORM'Column(name="date", type="date")
*/
private $date;
/**
* @var float
*
* @ORM'Column(name="prix", type="float")
*/
private $prix;
/**
* @ORM'ManyToOne(targetEntity="MDB'AdresseBundle'Entity'Ville", inversedBy="annonces")
*/
private $ville;
/**
* @ORM'ManyToMany(targetEntity="MDB'AnnonceBundle'Entity'Category", cascade={"persist"})
*/
private $categories;
/**
* @ORM'ManyToMany(targetEntity="MDB'UserBundle'Entity'User")
*
*/
private $wishlist;
/**
* @var boolean
*
* @ORM'Column(name="telAppear", type="boolean")
*/
private $telAppear;
/**
* @ORM'ManyToOne(targetEntity="MDB'UserBundle'Entity'User", inversedBy="annonces")
* @ORM'JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM'OneToMany(targetEntity="MDB'PlatformBundle'Entity'Image", mappedBy="annonce")
*/
private $images;
/**
* Get id
*
* @return integer
*/
public function getId() {
return $this->id;
}
/**
* Set titre
*
* @param string $titre
* @return Annonce
*/
public function setTitre($titre) {
$this->titre = $titre;
return $this;
}
/**
* Get titre
*
* @return string
*/
public function getTitre() {
return $this->titre;
}
/**
* Set description
*
* @param string $description
* @return Annonce
*/
public function setDescription($description) {
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription() {
return $this->description;
}
/**
* Set prix
*
* @param float $prix
* @return Annonce
*/
public function setPrix($prix) {
$this->prix = $prix;
return $this;
}
/**
* Get prix
*
* @return float
*/
public function getPrix() {
return $this->prix;
}
public function addCategory(Category $category) {
// Ici, on utilise l'ArrayCollection vraiment comme un tableau
$this->categories[] = $category;
return $this;
}
public function removeCategory(Category $category) {
$this->categories->removeElement($category);
}
public function getCategories() {
return $this->categories;
}
public function getDate() {
return $this->date;
}
public function setDate($date) {
$this->date = $date;
}
public function getWishlist() {
return $this->wishlist;
}
public function setWishlist($wishlist) {
$this->wishlist = $wishlist;
}
public function getVille() {
return $this->ville;
}
public function setVille($ville) {
$this->ville = $ville;
}
public function getTelAppear() {
return $this->telAppear;
}
public function setTelAppear($telAppear) {
$this->telAppear = $telAppear;
}
public function getUser() {
return $this->user;
}
public function setUser($user) {
$this->user = $user;
}
public function addImage(Image $image) {
$this->images[] = $image;
$image->setUser($this);
return $this;
}
public function removeImage(Image $image) {
$this->images->removeElement($image);
}
public function getImages() {
return $this->images;
}
}
图片.php
<?php
namespace MDB'PlatformBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Symfony'Component'Validator'Constraints as Assert;
/**
* Image
*
* @ORM'Table()
* @ORM'Entity
*/
class Image {
/**
* @var integer
*
* @ORM'Column(name="id", type="integer")
* @ORM'Id
* @ORM'GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM'Column(type="string", length=255, nullable=true)
*/
private $path;
/**
* @var string
*
* @ORM'Column(name="alt", type="string", length=255)
*/
private $alt;
/**
* @ORM'ManyToOne(targetEntity="MDB'AnnonceBundle'Entity'Annonce", inversedBy="images")
* @ORM'JoinColumn(nullable=true)
*/
private $annonce;
/**
* @Assert'File(maxSize="6000000")
*/
public $file;
/**
* Get id
*
* @return integer
*/
public function getId() {
return $this->id;
}
/**
* Set url
*
* @param string $url
* @return Image
*/
public function setUrl($url) {
$this->url = $url;
return $this;
}
/**
* Get url
*
* @return string
*/
public function getUrl() {
return $this->url;
}
/**
* Set alt
*
* @param string $alt
* @return Image
*/
public function setAlt($alt) {
$this->alt = $alt;
return $this;
}
/**
* Get alt
*
* @return string
*/
public function getAlt() {
return $this->alt;
}
public function getAnnonce() {
return $this->annonce;
}
public function setAnnonce($annonce) {
$this->annonce = $annonce;
}
public function getAbsolutePath() {
return null === $this->path ? null : $this->getUploadRootDir() . '/' . $this->path;
}
public function getWebPath() {
return null === $this->path ? null : $this->getUploadDir() . '/' . $this->path;
}
protected function getUploadRootDir() {
// le chemin absolu du répertoire où les documents uploadés doivent être sauvegardés
return __DIR__ . '/../../../../web/' . $this->getUploadDir();
}
protected function getUploadDir() {
// on se débarrasse de « __DIR__ » afin de ne pas avoir de problème lorsqu'on affiche
// le document/image dans la vue.
return 'uploads/documents';
}
public function getFile() {
return $this->file;
}
public function setFile($file) {
$this->file = $file;
}
}
AnnunceType.php
<?php
namespace MDB'AnnonceBundle'Form;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolverInterface;
class AnnonceType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('titre')
->add('description')
->add('date')
->add('prix')
->add('telAppear', 'checkbox', array('required' => false))
->add('ville', new 'MDB'AdresseBundle'Form'VilleType(), array('required' => true))
->add('categories')
->add('wishlist')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'MDB'AnnonceBundle'Entity'Annonce'
));
}
/**
* @return string
*/
public function getName() {
return 'mdb_annoncebundle_annonce';
}
}
AnnanceSellType.php(AnnanceType.php的继承人)
<?php
namespace MDB'AnnonceBundle'Form;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use 'MDB'PlatformBundle'Form'ImageType;
class AnnonceSellType extends AbstractType {
private $arrayListCat;
public function __construct($arrayListCat) {
$this->arrayListCat = $arrayListCat;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->remove('wishlist')
->remove('date')
->remove('categories')
->add('titre')
->add('description', 'textarea')
->add('prix')
->add('categories', 'choice', array(
'choices' => $this->arrayListCat,
'multiple' => true,
'mapped' => false,
))
->add('images', new ImageType())
;
}
/**
* @return string
*/
public function getName() {
return 'mdb_annoncebundle_annonce_sell';
}
public function getParent() {
return new AnnonceType();
}
}
ImageType.php
<?php
namespace MDB'PlatformBundle'Form;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolverInterface;
class ImageType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('file')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'MDB'PlatformBundle'Entity'Image'
));
}
/**
* @return string
*/
public function getName() {
return 'mdb_platformbundle_image';
}
}
我在提交表格时有以下错误:
属性"images"和其中一个方法"addImag()"/"removeImag(,"setImages()"、"images()","__set()"或"__call()"存在并且具有类"MDB''AnnanceBundle''Entity''Annance"中的公共访问。
我不明白为什么这些getter存在于我的实体中。有人有主意吗?
感谢
这个错误是逻辑错误。只需使用集合字段类型即可解决问题