5

ダウンロード ファイルを URL からサーバーにアップロードし、それをUploadable (DoctrineExtensions)で永続化する必要があります。ほとんどすべてが正常に機能します。私のアプローチは次のとおりです。

  1. curlサーバーの一時フォルダーにファイルをダウンロードする
  2. UploadedFileメソッドを作成し、プロパティ値を入力します
  3. アップロード可能なエンティティに挿入しますMedia
  4. 検証を行う
  5. 永続化してフラッシュする

簡略化されたコード:

// ... download file with curl

// Create UploadedFile object
$fileInfo = new File($tpath);
$file = new UploadedFile($tpath, basename($url), $fileInfo->getMimeType(), $fileInfo->getSize(), null);

// Insert file to Media entity
$media = new Media();
$media = $media->setFile($file);
$uploadableManager->markEntityToUpload($media, $file);

// Validate file (by annotations in entity)
$errors = $validator->validate($media);

// If no errors, persist and flush
if(empty($errors)) {
    $em->persist($this->parentEntity);
    $em->flush();
}

検証をスキップすると、すべて問題ありません。ファイルは正常に正しいパス (config.yml の Uploadable 拡張機能によって構成) に移動され、データベースに永続化されます。しかし、手動で作成された検証では、次のUploadedFileエラーが返されます。

ファイルをアップロードできませんでした。

URL からのアップロードに対して Validator を無効にし、カスタム メソッドでファイルを検証することはできますが、Symfony Validator オブジェクトでそれを行うと、私にとってはよりクリーンなソリューションのように思えます。

それを機能させる方法はありますか?

4

1 に答える 1

3

symfony 検証コンポーネントでは、制約 UploadedFile が内部的にこの関数を使用しますhttp://php.net/manual/es/function.is-uploaded-file.php

ここで確認できますhttps://github.com/symfony/HttpFoundation/blob/master/File/UploadedFile.php#L213

/**
 * Returns whether the file was uploaded successfully.
 *
 * @return bool True if the file has been uploaded with HTTP and no error occurred.
 *
 * @api
 */
public function isValid()
{
    $isOk = $this->error === UPLOAD_ERR_OK;
    return $this->test ? $isOk : $isOk && is_uploaded_file($this->getPathname());
}

独自の Downloadvalidator を作成する必要があります (はい、実際には curl でファイルをダウンロードしています)。

于 2015-08-07T20:45:15.587 に答える