Symfonyでは、以下を使用してMIMEタイプを受け入れることができます。
/**
* @Assert\File( maxSize="10M", mimeTypes={"application/pdf", "image/png"} )
*/
public $file;
しかし、どうすればそのリストから何かを除外できますか?たとえば、PHPファイルを除くすべてのアップロードを許可したいですか?
Symfonyでは、以下を使用してMIMEタイプを受け入れることができます。
/**
* @Assert\File( maxSize="10M", mimeTypes={"application/pdf", "image/png"} )
*/
public $file;
しかし、どうすればそのリストから何かを除外できますか?たとえば、PHPファイルを除くすべてのアップロードを許可したいですか?
アサーションを介してコールバック制約を実装できます。この方法の利点の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);
}
}
}
これを行うためにコールバックを作成する必要はありません。確認してください:
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