【问题标题】:Mapping not found for field "image" vichupolader symfony2找不到字段“图像”的映射 vichupolider symfony2
【发布时间】:2016-10-29 16:36:49
【问题描述】:

我正在尝试在图像实体和用户实体之间建立 OneToOne 关系:

图片:

    /**
 * 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';
    }
}

这个错误出现在我身上:

找不到字段“图像”的映射

我该如何解决这个问题

【问题讨论】:

    标签: php image symfony orm vichuploaderbundle


    【解决方案1】:
    1. User类不需要添加@Vich\Uploadable,可以去掉那个注解。
    2. 在表单类型 RegistrationFormType 图像不是类型 Vich\Uploadable 中,您应该为 Image 类创建一个表单类型,例如,将其命名为 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
                  ))
      
              ;
      
    3. RegistrationFormType 中引用您的图片类型:

       ->add('image', new ImageType(),array(...))
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 2012-10-06
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      相关资源
      最近更新 更多