我的图片上传有点问题,请你帮帮我吧:
无法确定属性"文件"的访问类型.
调节器
/**
* Creates a new Produits entity.
*
*/
public function createAction(Request $request)
{
$entity = new Produits();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('adminProduits_show', array('id' => $entity->getId())));
}
return $this->render('EcommerceBundle:Administration:Produits/layout/new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
/**
* Creates a form to create a Produits entity.
*
* @param Produits $entity The entity
*
* @return \Symfony\Component\Form\Form The form
*/
private function createCreateForm(Produits $entity)
{
$form = $this->createForm(ProduitsType::class, $entity);
$form->add('submit', SubmitType::class, array('label' => 'Ajouter'));
return $form;
}
/**
* Displays a form to create a new Produits entity.
*
*/
public function newAction()
{
$entity = new Produits();
$form = $this->createCreateForm($entity);
return $this->render('EcommerceBundle:Administration:Produits/layout/new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
Run Code Online (Sandbox Code Playgroud)
形成
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('file', FileType::class, array('data_class' => null))
->add('name', TextType::class)
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Ecommerce\EcommerceBundle\Entity\Media'
));
}
/**
* @return string
*/
public function getName()
{
return 'ecommerce_ecommercebundle_media';
}
Run Code Online (Sandbox Code Playgroud)
实体
/**
* @ORM\Column(name="name",type="string",length=255)
* @Assert\NotBlank()
*/
private $name;
/**
* @ORM\Column(type="string",length=255, nullable=true)
*/
private $path;
/**
* @Assert\File(
* maxSize = "1024k",
* mimeTypes = {"image/png", "image/jpg", "image/bmp"},
* mimeTypesMessage = "Please upload a valid PDF"
* )
*/
public $file;
public function getUploadRootDir()
{
return __dir__.'/../../../../web/uploads';
}
public function getAbsolutePath()
{
return null === $this->path ? null : $this->getUploadRootDir().'/'.$this->path;
}
public function getAssetPath()
{
return 'uploads/'.$this->path;
}
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload()
{
$this->tempFile = $this->getAbsolutePath();
$this->oldFile = $this->getPath();
$this->updateAt = new \DateTime();
if (null !== $this->file)
$this->path = sha1(uniqid(mt_rand(),true)).'.'.$this->file->guessExtension();
}
/**
* @ORM\PostPersist()
* @ORM\PostUpdate()
*/
public function upload()
{
if (null !== $this->file) {
$this->file->move($this->getUploadRootDir(),$this->path);
unset($this->file);
if ($this->oldFile != null) unlink($this->tempFile);
}
}
/**
* @ORM\PreRemove()
*/
public function preRemoveUpload()
{
$this->tempFile = $this->getAbsolutePath();
}
/**
* @ORM\PostRemove()
*/
public function removeUpload()
{
if (file_exists($this->tempFile)) unlink($this->tempFile);
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
public function getPath()
{
return $this->path;
}
public function getName()
{
return $this->name;
}
public function getFile()
{
return $this->file;
}
/**
* Set path
*
* @param string $path
* @return String
*/
public function setPath($path)
{
$this->path = $path;
return $this;
}
/**
* Set alt
*
* @param string $alt
* @return String
*/
public function setAlt($alt)
{
$this->alt = $alt;
return $this;
}
/**
* Set name
*
* @param string $name
* @return String
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Set updateAt
*
* @param \DateTime $updateAt
*
* @return Media
*/
public function setUpdateAt($updateAt)
{
$this->updateAt = $updateAt;
return $this;
}
/**
* Get updateAt
*
* @return \DateTime
*/
public function getUpdateAt()
{
return $this->updateAt;
}
Run Code Online (Sandbox Code Playgroud)
谢谢你们的帮助:)
Sca*_*old 11
请在表单构建器中添加" 'mapped'=> false ".
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('file', FileType::class,
array(
'data_class' => null,
'mapped' => false,
))
->add('name', TextType::class)
;
}
Run Code Online (Sandbox Code Playgroud)
那些说解散是错误的人,请看那里的测试.我不是那个弄错了的人.
测试代码:https: //github.com/symfony/property-access/blob/master/Tests/PropertyAccessorCollectionTest.php#L151
第二种解决方案是将函数setXxx添加到在类Entity中给出错误的属性.
public $xxx;
public function setXxx(Array $xxx)
{
$this->xxx = $xxx;
}
Run Code Online (Sandbox Code Playgroud)
要么
public function __construct()
{
$this->xxx = new ArrayCollection();
}
Run Code Online (Sandbox Code Playgroud)
视频链接:https://knpuniversity.com/screencast/doctrine-relations/create-genus-note
我的英语很糟糕,我可以告诉你.
设置mapped => false不是真正的解决方案,因为字段IS映射到实体.
在我的例子中,我有一个OneToMany关系,所以我需要映射字段才能使用'cascase'=> {"all"}选项.
如果未映射该字段,则必须手动保留相关实体.那不好.
在为我的问题寻找解决方案时偶然发现了这个问题,它发生了同样的错误,我也在使用 ArrayCollection 类,所以这可能对某人有帮助:
我在 ArrayCollection 中的字段被称为$files,所以我必须添加这样的构造函数:
use Doctrine\Common\Collections\ArrayCollection;
public function __construct()
{
$this->files = new ArrayCollection();
}
Run Code Online (Sandbox Code Playgroud)
然后我添加了 add 和 remove 方法,如下所示:
public function addFile(MyFile $file) : self
{
$file->setParentMyItem($this); // Setting parent item
$this->files->add($file);
return $this;
}
public function removeFile(MyFile $file) : self
{
$this->files->removeElement($file);
return $this;
}
Run Code Online (Sandbox Code Playgroud)
但美中不足的是,即使我的领域名字是$files我的名字add和remove方法addFile()以及removeFile()无“S”年底,这完全是不符合逻辑的我,但解决了这个问题。
| 归档时间: |
|
| 查看次数: |
20577 次 |
| 最近记录: |