gpt4 book ai didi

php - Symfony2 + SonataAdmin + VichUploaderBundle - 图片上传字段

转载 作者:可可西里 更新时间:2023-10-31 23:40:11 24 4
gpt4 key购买 nike

作为 Symfony 的新手,花了最后几天的时间尝试找到一个很好的解决方案,将图像上传字段集成到 Sonata Admin 中的现有实体中。我一直在谷歌搜索并遵循可用的指南,但不幸的是我无法弄清楚。

标题中指定的设置

Symfony2奏鸣曲管理员VichUploaderBundle

我目前遇到以下错误:

"Catchable Fatal Error: Argument 1 passed to Beautify\BeautiesBundle\Entity\Beauty::setImageFile() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, instance of Symfony\Component\HttpFoundation\File\File given, called in /Users/gmf/symfony/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php on line 438 and defined in /Users/gmf/symfony/src/Beautify/BeautiesBundle/Entity/Beauty.php line 75 "

图片上传字段正确呈现,提交后收到错误。

这是第 75 行:

/**
* If manually uploading a file (i.e. not using Symfony Form) ensure an instance
* of 'UploadedFile' is injected into this setter to trigger the update. If this
* bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
* must be able to accept an instance of 'File' as the bundle will inject one here
* during Doctrine hydration.
*
* @param File|\Symfony\Component\HttpFoundation\File\UploadedFile
*/
public function setImageFile(UploadedFile $image = null)
{
$this->imageFile = $image;

if ($image) {
// It is required that at least one field changes if you are using doctrine
// otherwise the event listeners won't be called and the file is lost
$this->updatedAt = new \DateTime('now');
}
}

她的是我其他密切相关的文件:

实体文件:

 <?php

// src/Beautify/BeautiesBundle/Entity/Beauty.php

namespace Beautify\BeautiesBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
* @ORM\Entity
* @ORM\Table(name="beauties")
* @ORM\HasLifecycleCallbacks
* @Vich\Uploadable
*/

class Beauty
{

/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="string", length=100)
*/

protected $name;

/**
* @ORM\Column(type="text")
*/

protected $content;



/**
* @Vich\UploadableField(mapping="beauty_image", fileNameProperty="imageName")
* @var File $imageFile
*/
protected $imageFile;

/**
* @ORM\Column(type="string", length=255, nullable=true, name="image_name")
* @var string $imageName
*/
protected $imageName;



/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="beauties")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;





/**
* If manually uploading a file (i.e. not using Symfony Form) ensure an instance
* of 'UploadedFile' is injected into this setter to trigger the update. If this
* bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
* must be able to accept an instance of 'File' as the bundle will inject one here
* during Doctrine hydration.
*
* @param File|\Symfony\Component\HttpFoundation\File\UploadedFile
*/
public function setImageFile(File $image = null)
{
$this->imageFile = $image;

if ($image) {
// It is required that at least one field changes if you are using doctrine
// otherwise the event listeners won't be called and the file is lost
$this->updatedAt = new \DateTime('now');
}
}

/**
* @return File
*/
public function getImageFile()
{
return $this->imageFile;
}

/**
* @param string $imageName
*/
public function setImageName($imageName)
{
$this->imageName = $imageName;
}

/**
* @return string
*/
public function getImageName()
{
return $this->imageName;
}






public function __toString()
{
return ($this->getName()) ? : '';
}

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

/**
* Set name
*
* @param string $name
* @return Beauty
*/
public function setName($name)
{
$this->name = $name;

return $this;
}

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

/**
* Set content
*
* @param string $content
* @return Beauty
*/
public function setContent($content)
{
$this->content = $content;

return $this;
}

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

/**
* Set category
*
* @param \Beautify\BeautiesBundle\Entity\Category $category
* @return Beauty
*/
public function setCategory(\Beautify\BeautiesBundle\Entity\Category $category = null)
{
$this->category = $category;

return $this;
}

/**
* Get category
*
* @return \Beautify\BeautiesBundle\Entity\Category
*/
public function getCategory()
{
return $this->category;
}








}

#ADMIN 文件

<?php
// src/Beautify/BeautiesBundle/Admin/BeautyAdmin.php

namespace Beautify\BeautiesBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;

use Knp\Menu\ItemInterface as MenuItemInterface;

use Beautify\CategoryBundle\Entity\Category;


class BeautyAdmin extends Admin
{
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with('General')
->add('name', 'text', array('label' => 'Name'))
->add('content', 'textarea', array('label' => 'Content'))
->add('imageFile', 'file', array('label' => 'Image file', 'required' => false))
->end()
->with('Category')
->add('category', 'sonata_type_model', array('expanded' => true))
->end()
;
}



// Fields to be shown on filter forms
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('name')
->add('content')
->add('category')
;
}

// Fields to be shown on lists
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('name')
->add('content')
->add('category')
->add('_action', 'actions', array(
'actions' => array(
'show' => array(),
'edit' => array(),
'delete' => array(),
)
))
;
}
}





**#SERVICES FILE**



report.listener:
class: Beautify\BeautiesBundle\Entity\Beauty
tags:
- { name: doctrine.event_listener, event: prePersist }
- { name: doctrine.event_listener, event: preUpdate }




**#CONFIG.YML**

# Your other blocks
vich_uploader:
db_driver: orm

mappings:
beauty_image:
uri_prefix: /images/beauties
upload_destination: %kernel.root_dir%/../images

非常感谢任何帮助,我会很高兴

最佳答案

您错过了 File 类的 use 语句:use Symfony\Component\HttpFoundation\File\File;

关于php - Symfony2 + SonataAdmin + VichUploaderBundle - 图片上传字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26862408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com