中に見つかりませんでした私はファイル属性を含む属性のリストを持つエンティティドキュメントを作成し、私は更新時にドキュメントを追加すると、非常によく合いながら、私は検証エラーを取得:symfonyの - ファイルが更新
ファイルが見つかりませんでした。
編集に追加することなく、オプションの間、私はちょうど古いファイルを保つことができるため、ファイル属性は、必要に応じなければなりません。ここで
は私の実体文書の一部です:
/**
* @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);
}
}
とコントローラで私が持っている:
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();
}
...
}
任意のヘルプしてください?
EDIT
ドキュメントが更新されながら不思議行動IAM:
ユーザーがファイルを更新した場合、ファイルの属性は@assert \ファイルを検証する必要があります、
その他その他のファイル属性は検証されませんドキュメントの作成中に追加されました。
ご回答いただきありがとうございます。上記の検証グループを使用した場合はもちろん、フィールドを更新することができますが、ユーザーがファイルを更新した場合はファイルとして検証されません。 –
ええと、ファイル名を保持し、同じ場所($ fileプロパティ)にファイルインスタンスをアップロードしました。したがって、ドキュメントの編集中に、handleRequest()メソッドは古いファイル名をformの値で置き換えます。空の値でエラーが発生してはいけません(バリデータはこの制約をスキップします)。しかし、エラーメッセージには、値が空ではないことが示されています。無効なファイル名(FileValidatorもファイル名として文字列を処理します)によって発生する同じエラーです。 edit(handleRequest()呼び出しの前とisValid()呼び出しの前)の間に、$ fileプロパティの境界値をチェックしてください。 – Timurib
Symfonyで送信されたフォームは編集できないため、常に無効です。あなたの場合は、常にファイルストリングとアップロードされたファイルインスタンスの2つの別々の属性を作成します。 –