gpt4 book ai didi

php - 使用 sonata-admin 包上传文件时出错

转载 作者:行者123 更新时间:2023-12-05 02:21:00 24 4
gpt4 key购买 nike

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

Expected argument of type "AppBundle\Entity\UploadedFile", "Symfony\Component\HttpFoundation\File\UploadedFile" given

我的实体文件

<?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',
))
;
}

}

最佳答案

在您的实体文件中,您忘记包含特定的使用...

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\UploadedFile; // <--- HERE

关于php - 使用 sonata-admin 包上传文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36916863/

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