gpt4 book ai didi

php - Symfony - 在更新过程中找不到该文件

转载 作者:行者123 更新时间:2023-12-01 09:49:41 25 4
gpt4 key购买 nike

我创建了一个实体文档,其中包含一个包含文件属性的属性列表,同时添加文档非常顺利,当我更新时出现验证错误:

The file could not be found.



文件属性在添加时必须是必需的,但在编辑中是可选的,因为我可以只保留旧文件。

这是我的实体文档的一部分:
/**
* @ORM\Entity
* @ORM\Table(name="document")
*/
class Document
{
...

/**
* @var string
* @Assert\NotBlank()
* @Assert\File(maxSize = "5M", mimeTypes = {"application/pdf"})
* @ORM\Column(name="file", type="string", length=255, nullable=true)
*/
private $file;

/**
* @var string
* @ORM\Column(name="name", type="string", length=50)
*/
private $name;

/**
* @ORM\ManyToOne(targetEntity="Dtype", inversedBy="documents")
*/
private $dtype;

...

public function uploadFile($path, $type='', $oldFile=null)
{
$file = $this->getFile();
if ($file instanceof UploadedFile) {
if(!empty($type)){
$path = $path. '/' . $type;
}
$fileName = md5(uniqid()).'.'.$file->guessExtension();
$file->move($path, $fileName);
$this->setFile($type. '/' .$fileName);
if($oldFile !== null){
$oldFilePath = $path .'/'. $oldFile;
if(file_exists($oldFilePath))
unlink($oldFilePath);
}
}else{
$this->setFile($oldFile);
}

}

在 Controller 中我有:
public function editAction(Request $request, Document $document) {
$oldFile = $document->getFile();
$form = $this->createForm('AppBundle\Form\DocumentType', $document);
$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
$document->uploadFile($this->getParameter('documents_file_dir'), $document->getDtype()->getChemin(), $oldFile);
$em = $this->getDoctrine()->getManager();
$em->persist($document);
$em->flush();
}
...
}

请问有什么帮助吗?

编辑

更新文档时我想知道的行为:

用户已更新文件,则必须使用@Assert\File 验证文件属性,

其他 不会验证文件属性,因此我可以在创建文档时保留上传的原始文件。

最佳答案

使用 validation groups .
将字段标记为仅用于创建新文档的必需文件:

/**
* ...
* @Assert\File(maxSize = "5M", mimeTypes = {"application/pdf"}, groups = {"create"})
* ...
*/
private $file;

并为创建和编辑操作指定相关组:
public function editAction(Request $request) {
// ...
$form = $this->createForm('AppBundle\Form\DocumentType', $document, ["create"]);

// ...

public function editAction(Request $request, Document $document) {
// ...
$form = $this->createForm('AppBundle\Form\DocumentType', $document, ["edit"]);

关于php - Symfony - 在更新过程中找不到该文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40631239/

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