使用sonata管理捆绑包上载文件时出错


Error in file upload with sonata-admin bundle

我正在尝试使用sonata管理捆绑包执行文件上传
但当我在创建表单中按下创建按钮时,会出现此错误。

应为"AppBundle''Entity''UploadedFile"类型的参数,给定的"Symfony''Component''HttpFoundation''File''UploadedFile"

我的实体文件

<?php
namespace AppBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
 * BlogPost
 *
 * @ORM'Table()
 * @ORM'Entity
 */
class BlogPost {
    const SERVER_PATH_TO_IMAGE_FOLDER = '/uploads';
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var string
     *
     * @ORM'Column(name="title", type="string", length=255)
     */
    private $title;
    /**
     * @var string
     *
     * @ORM'Column(name="body", type="text")
     */
    private $body;
    /**
     * @var string
     *
     * @ORM'Column(name="filename", type="text")
     */
    private $filename;
    /**
     * @var boolean
     *
     * @ORM'Column(name="draft", type="boolean")
     */
    private $draft;
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId() {
        return $this->id;
    }
    /**
     * Set title
     *
     * @param string $title
     * @return BlogPost
     */
    public function setTitle($title) {
        $this->title = $title;
        return $this;
    }
    /**
     * Get title
     *
     * @return string 
     */
    public function getTitle() {
        return $this->title;
    }
    /**
     * Set body
     *
     * @param string $body
     * @return BlogPost
     */
    public function setBody($body) {
        $this->body = $body;
        return $this;
    }
    /**
     * Get body
     *
     * @return string 
     */
    public function getBody() {
        return $this->body;
    }
    /**
     * Set draft
     *
     * @param boolean $draft
     * @return BlogPost
     */
    public function setDraft($draft) {
        $this->draft = $draft;
        return $this;
    }
    /**
     * Get draft
     *
     * @return boolean 
     */
    public function getDraft() {
        return $this->draft;
    }
    /**
     * @ORM'ManyToOne(targetEntity="Category", inversedBy="blogPosts")
     */
    private $category;
    public function setCategory(Category $category) {
        $this->category = $category;
    }
    public function getCategory() {
        return $this->category;
    }
    /**
     * Unmapped property to handle file uploads
     */
    private $file;
    /**
     * Sets file.
     *
     * @param UploadedFile $file
     */
    public function setFile(UploadedFile $file = null) {
        $this->file = $file;
    }
    /**
     * Get file.
     *
     * @return UploadedFile
     */
    public function getFile() {
        return $this->file;
    }
    /**
     * Manages the copying of the file to the relevant place on the server
     */
    public function upload() {
        // the file property can be empty if the field is not required
        if (null === $this->getFile()) {
            return;
        }
        // we use the original file name here but you should
        // sanitize it at least to avoid any security issues
        // move takes the target directory and target filename as params
        $this->getFile()->move(
                self::SERVER_PATH_TO_IMAGE_FOLDER, $this->getFile()->getClientOriginalName()
        );
        // set the path property to the filename where you've saved the file
        $this->filename = $this->getFile()->getClientOriginalName();
        // clean up the file property as you won't need it anymore
        $this->setFile(null);
    }
    /**
     * Lifecycle callback to upload the file to the server
     */
    public function lifecycleFileUpload() {
        $this->upload();
    }
    /**
     * Updates the hash value to force the preUpdate and postUpdate events to fire
     */
    public function refreshUpdated() {
        $this->setUpdated(new 'DateTime());
    }
// ... the rest of your class lives under here, including the generated fields
//     such as filename and updated
}

我的管理文件

<?php
// src/AppBundle/Admin/BlogPostAdmin.php
namespace AppBundle'Admin;
use Sonata'AdminBundle'Admin'Admin;
use Sonata'AdminBundle'Datagrid'ListMapper;
use Sonata'AdminBundle'Form'FormMapper;
use Sonata'AdminBundle'Datagrid'DatagridMapper;
class BlogPostAdmin extends Admin {
    protected function configureFormFields(FormMapper $formMapper) {
        $formMapper
                ->tab('Post')
                ->with('Content', array('class' => 'col-md-9'))
                ->add('title', 'text')
                ->add('body', 'textarea')
                ->add('file', 'file', array(
                    'required' => false
                ))
                ->end()
                ->end()
                ->tab('Publish Options')
                ->with('Meta data', array('class' => 'col-md-3'))
                ->add('category', 'sonata_type_model', array(
                    'class' => 'AppBundle'Entity'Category',
                    'property' => 'name',
                ))
                ->end()
                ->end()
        ;
    }
    public function prePersist($image) {
        $this->manageFileUpload($image);
    }
    public function preUpdate($image) {
        $this->manageFileUpload($image);
    }
    private function manageFileUpload($image) {
        if ($image->getFile()) {
            $image->refreshUpdated();
        }
    }
    protected function configureListFields(ListMapper $listMapper) {
        $listMapper
                ->addIdentifier('title')
                ->add('category.name')
                ->add('draft')
        ;
    }
    public function toString($object) {
        return $object instanceof BlogPost ? $object->getTitle() : 'Blog Post'; // shown in the breadcrumb on the create view
    }
    protected function configureDatagridFilters(DatagridMapper $datagridMapper) {
        $datagridMapper
                ->add('title')
                ->add('body')
                ->add('category', null, array(), 'entity', array(
                    'class' => 'AppBundle'Entity'Category',
                    'property' => 'name',
                ))
        ;
    }
}

entity file中,您忘记包含特定的use。。。

<?php
namespace AppBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Symfony'Component'HttpFoundation'File'UploadedFile;  // <--- HERE