9

Symfonyでは、以下を使用してMIMEタイプを受け入れることができます。

/**
  * @Assert\File( maxSize="10M", mimeTypes={"application/pdf", "image/png"} )
  */
public $file;

しかし、どうすればそのリストから何かを除外できますか?たとえば、PHPファイルを除くすべてのアップロードを許可したいですか?

4

2 に答える 2

6

アサーションを介してコールバック制約を実装できます。この方法の利点の1つは、フォーム内の任意のフィールドにエラーメッセージを適用できることです。

use Symfony\Component\Validator\ExecutionContext;

/**
 * @ORM\Entity()
 * @Assert\Callback(methods={"validateFile"})
 */
class MyEntity
{

    public function validateFile(ExecutionContext $context)
    {
        $path = $context->getPropertyPath();
        if (/* $this->file is not in allowed mimeTypes ... */) {
            $context->setPropertyPath($path . '.file');
            $context->addViolation("Invalid file mimetype", array(), null);
        }
    }
}
于 2012-12-26T18:38:28.177 に答える
6

これを行うためにコールバックを作成する必要はありません。確認してください:

1)app / config/config.ymlでenable_annotationsパラメーターをtrueに設定します。

# app/config/config.yml
framework:
    validation:      { enable_annotations: true }

2)エンティティファイルに検証制約を適切に含めます。

// YourEntity.php
use Symfony\Component\Validator\Constraints as Assert;

3)注釈を適切に使用します。例:

// YourEntity.php
/**
 * @Assert\File(
 *      maxSize="5242880",
 *      mimeTypes = {
 *          "image/png",
 *          "image/jpeg",
 *          "image/jpg",
 *          "image/gif",
 *          "application/pdf",
 *          "application/x-pdf"
 *      }
 * )
 */
 private $arquivo;

上記のコードは私のSymfony2.3.​​9で正常に動作しています。

[] s

于 2014-01-17T17:01:33.217 に答える