找不到字段 "image" vichupolader symfony2 的映射
Mapping not found for field "image" vichupolader symfony2
我正在尝试在图像实体和用户实体之间建立一对一关系,就像这样:
图片:
/**
* Image
*
* @ORM\Table(name="image")
* @ORM\Entity(repositoryClass="SocialNetworkBundle\Repository\ImageRepository")
* @Vich\Uploadable
*/
class Image {
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* Get id
*
* @return int
*/
public function getId() {
return $this->id;
}
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Vich\UploadableField(mapping="user_image", fileNameProperty="imageName")
* @Assert\File(
* maxSize = "1024k",
* mimeTypes = {"image/png", "image/jpeg", "image/jpg"},
* mimeTypesMessage = "Please upload a valid PDF or valid IMAGE"
* )
*
* @var File
*/
private $imageFile;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*
* @var string
*/
private $imageName;
/**
* Set imageName
*
* @param string $imageName
*
* @return Image
*/
public function setImageName($imageName) {
$this->imageName = $imageName;
return $this;
}
/**
* Get imageName
*
* @return string
*/
public function getImageName() {
return $this->imageName;
}
}
用户:
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="UserBundle\Repository\UserRepository")
* @Vich\Uploadable
*/
class User extends BaseUser {
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, unique=false)
* @Assert\Length(min=2, max=100)
*/
private $name;
/**
* @ORM\OneToOne(targetEntity="SocialNetworkBundle\Entity\Image", cascade={"persist", "merge", "remove"})
* @ORM\JoinColumn(name="image_id", referencedColumnName="id")
* @Assert\Valid()
*/
private $image;
/**
* Set name
*
* @param string $name
*
* @return User
*/
public function setName($name) {
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName() {
return $this->name;
}
/**
* Set image
*
* @param \SocialNetworkBundle\Entity\Image $image
*
* @return User
*/
public function setImage(\SocialNetworkBundle\Entity\Image $image = null) {
$this->image = $image;
return $this;
}
/**
* Get image
*
* @return \SocialNetworkBundle\Entity\Image
*/
public function getImage() {
return $this->image;
}
}
和用户的表单生成器:
class RegistrationFormType extends BaseType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
// add your custom field
$builder->add('name')
->add('roles', 'collection', array(
'type' => 'choice',
'options' => array(
'choices' => array(
'ROLE_ADMIN' => 'Admin'))))
->add('image', VichFileType::class, array(
'required' => false,
'allow_delete' => true, // not mandatory, default is true
'download_link' => true, // not mandatory, default is true
))
;
}
public function getName()
{
return 'user_registration';
}
}
这个错误出现在我身上:
Mapping not found for field "image"
我该如何解决
- 不需要为
User
class 添加 @Vich\Uploadable
,您可以删除该注释。
In the form Type RegistrationFormType
Image is not of Type Vich\Uploadable
, you should create a form type for Image
class let's cll it ImageType
例如并将其添加到其中:
$builder->add('name')
->add('image', VichFileType::class, array(
'required' => false,
'allow_delete' => true, // not mandatory, default is true
'download_link' => true, // not mandatory, default is true
))
;
在 RegistrationFormType
中引用您的图像类型:
->add('image', new ImageType(),array(...))
我正在尝试在图像实体和用户实体之间建立一对一关系,就像这样:
图片:
/**
* Image
*
* @ORM\Table(name="image")
* @ORM\Entity(repositoryClass="SocialNetworkBundle\Repository\ImageRepository")
* @Vich\Uploadable
*/
class Image {
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* Get id
*
* @return int
*/
public function getId() {
return $this->id;
}
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Vich\UploadableField(mapping="user_image", fileNameProperty="imageName")
* @Assert\File(
* maxSize = "1024k",
* mimeTypes = {"image/png", "image/jpeg", "image/jpg"},
* mimeTypesMessage = "Please upload a valid PDF or valid IMAGE"
* )
*
* @var File
*/
private $imageFile;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*
* @var string
*/
private $imageName;
/**
* Set imageName
*
* @param string $imageName
*
* @return Image
*/
public function setImageName($imageName) {
$this->imageName = $imageName;
return $this;
}
/**
* Get imageName
*
* @return string
*/
public function getImageName() {
return $this->imageName;
}
}
用户:
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="UserBundle\Repository\UserRepository")
* @Vich\Uploadable
*/
class User extends BaseUser {
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255, unique=false)
* @Assert\Length(min=2, max=100)
*/
private $name;
/**
* @ORM\OneToOne(targetEntity="SocialNetworkBundle\Entity\Image", cascade={"persist", "merge", "remove"})
* @ORM\JoinColumn(name="image_id", referencedColumnName="id")
* @Assert\Valid()
*/
private $image;
/**
* Set name
*
* @param string $name
*
* @return User
*/
public function setName($name) {
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName() {
return $this->name;
}
/**
* Set image
*
* @param \SocialNetworkBundle\Entity\Image $image
*
* @return User
*/
public function setImage(\SocialNetworkBundle\Entity\Image $image = null) {
$this->image = $image;
return $this;
}
/**
* Get image
*
* @return \SocialNetworkBundle\Entity\Image
*/
public function getImage() {
return $this->image;
}
}
和用户的表单生成器:
class RegistrationFormType extends BaseType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
// add your custom field
$builder->add('name')
->add('roles', 'collection', array(
'type' => 'choice',
'options' => array(
'choices' => array(
'ROLE_ADMIN' => 'Admin'))))
->add('image', VichFileType::class, array(
'required' => false,
'allow_delete' => true, // not mandatory, default is true
'download_link' => true, // not mandatory, default is true
))
;
}
public function getName()
{
return 'user_registration';
}
}
这个错误出现在我身上:
Mapping not found for field "image"
我该如何解决
- 不需要为
User
class 添加@Vich\Uploadable
,您可以删除该注释。 In the form Type
RegistrationFormType
Image is not of TypeVich\Uploadable
, you should create a form type forImage
class let's cll itImageType
例如并将其添加到其中:$builder->add('name') ->add('image', VichFileType::class, array( 'required' => false, 'allow_delete' => true, // not mandatory, default is true 'download_link' => true, // not mandatory, default is true )) ;
在
RegistrationFormType
中引用您的图像类型:->add('image', new ImageType(),array(...))