2016-04-28 9 views
2

sonata admin bundleでファイルアップロードを実行しようとしています。
しかし、フォームを作成する際に「作成」ボタンを押すと、このエラーが発生します。sonata-adminバンドルでのファイルアップロードでエラーが発生しました

私の実体ファイル

<?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 
} 

与えられたタイプの予想引数 "AppBundle \エンティティ\にUploadedFile"、 "のSymfony \ Componentが\ HttpFoundation \ \にUploadedFileファイル"私の管理ファイル

<?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

答えて

3

、あなたは特定のuse ...

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\HttpFoundation\File\UploadedFile; // <--- HERE 
を含めるのを忘れて
関連する問題