File

Note

  • 対象バージョン:2.3
  • 翻訳更新日:2013/6/9

値が有効な “ファイル” であることを検証します。ファイルとは次のどれかになります。

  • 存在するファイルへのパスを表す文字列、または __toString() メソッドを持つオブジェクト
  • 有効な Symfony\Component\HttpFoundation\File\File クラス、およびサブクラスのオブジェクト。これには Symfony\Component\HttpFoundation\File\UploadedFile クラスのオブジェクトも含まれます。

この制約は、フォームの file フォームタイプと合わせて使われます。

Tip

検証対象のファイルが画像である場合は Image 制約を使ってください。

適用先 プロパティまたはメソッド
オプション
クラス Symfony\Component\Validator\Constraints\File
バリデーター Symfony\Component\Validator\Constraints\FileValidator

基本的な使い方

この制約は、フォームの file フォームタイプでレンダリングするプロパティに対して使います。たとえば、著者情報のフォームを作成しており、著者情報の PDF ファイルをアップロードできるようにするとします。フォームでは、bioFile プロパティを file タイプにします。Author クラスは次のようになります。

// src/Acme/BlogBundle/Entity/Author.php
namespace Acme\BlogBundle\Entity;

use Symfony\Component\HttpFoundation\File\File;

class Author
{
    protected $bioFile;

    public function setBioFile(File $file = null)
    {
        $this->bioFile = $file;
    }

    public function getBioFile()
    {
        return $this->bioFile;
    }
}

bioFile フィールドの File オブジェクトが有効で、特定のファイルサイズ以下の有効な PDF ファイルであることを保証するには、次のようにします。

  • YAML
    # src/Acme/BlogBundle/Resources/config/validation.yml
    Acme\BlogBundle\Entity\Author:
        properties:
            bioFile:
                - File:
                    maxSize: 1024k
                    mimeTypes: [application/pdf, application/x-pdf]
                    mimeTypesMessage: Please upload a valid PDF
    
  • Annotations
    // src/Acme/BlogBundle/Entity/Author.php
    namespace Acme\BlogBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        /**
         * @Assert\File(
         *     maxSize = "1024k",
         *     mimeTypes = {"application/pdf", "application/x-pdf"},
         *     mimeTypesMessage = "Please upload a valid PDF"
         * )
         */
        protected $bioFile;
    }
    
  • XML
    <!-- src/Acme/BlogBundle/Resources/config/validation.xml -->
    <class name="Acme\BlogBundle\Entity\Author">
        <property name="bioFile">
            <constraint name="File">
                <option name="maxSize">1024k</option>
                <option name="mimeTypes">
                    <value>application/pdf</value>
                    <value>application/x-pdf</value>
                </option>
                <option name="mimeTypesMessage">Please upload a valid PDF</option>
            </constraint>
        </property>
    </class>
    
  • PHP
    // src/Acme/BlogBundle/Entity/Author.php
    namespace Acme\BlogBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('bioFile', new Assert\File(array(
                'maxSize' => '1024k',
                'mimeTypes' => array(
                    'application/pdf',
                    'application/x-pdf',
                ),
                'mimeTypesMessage' => 'Please upload a valid PDF',
            )));
        }
    }
    

bioFile プロパティが検証され、実際に存在するファイルであることが保証されます。ファイルサイズと MIME タイプオプションも指定しているので、同時に検証が行われます。

オプション

maxSize

: mixed

検証対象のファイルのサイズが指定した数値以下であることを検証します。次のような形式でファイルサイズを指定します。

  • バイト: maxSize をバイト数単位で指定するには、単純に数値のみの値を指定します (4096)。
  • キロバイト: maxSize をキロバイト単位で指定するには、数値と小文字の “k” で指定します (200k)。
  • メガバイト: maxSize をメガバイト単位で指定するには、数値と大文字の “M” で指定します (4M)。

mimeTypes

: array または string

検証対象のファイルの MIME タイプを検証します。文字列で指定した場合は、MIME タイプが一致することを、配列で指定した場合は、MIME タイプがコレクション中に存在することが検証されます。

既存の MIME タイプの一覧については、IANA Web サイトを参照してください。

maxSizeMessage

: string デフォルト: The file is too large ({{ size }}). Allowed maximum size is {{ limit }}

検証対象のファイルサイズが maxSize オプションで指定したサイズよりも大きかった場合に、このメッセージが表示されます。

mimeTypesMessage

: string デフォルトt: The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}

検証対象のファイルの MIME タイプが mimeTypes オプションに対して有効な値ではない場合に、このメッセージが表示されます。

notFoundMessage

: string デフォルト: The file could not be found

入力されたパスにファイルが見つからない場合に、このメッセージが表示されます。このエラーは、文字列のパスを検証対象としている場合にのみ発生します。File オブジェクトを使っている場合は、無効なファイルパスでオブジェクトを作成することができません。

notReadableMessage

: string デフォルト: The file is not readable

入力されたパスにファイルが存在するが PHP の is_readable 関数の検査が失敗する場合に、このメッセージが表示されます。

uploadIniSizeErrorMessage

: string デフォルト: The file is too large. Allowed maximum size is {{ limit }}

アップロードされたファイルのサイズが PHP.ini の upload_max_filesize 設定値よりも大きい場合に、このメッセージが表示されます。

uploadFormSizeErrorMessage

: string デフォルト: The file is too large

アップロードされたファイルのサイズが HTML の file INPUT タグに指定された値よりも大きい場合に、このメッセージが表示されます。

uploadErrorMessage

: string デフォルト: The file could not be uploaded

ファイルアップロードに失敗したり、ディスクへの書き込みができなかったなど、何らかの理由でファイルがアップロードできなかった場合に、このメッセージが表示されます。

このページのコンテンツ

前のドキュメント

Country

次のドキュメント

Image

ソース



クイックリンク

コメントリスト


ご質問や翻訳不備等お気軽にコメントください。


現在、翻訳が古くなっている箇所が多くあります。1箇所、1行などほんの少量でもかまいませんので、ドキュメント翻訳にご協力いただける方を募集しています。日本 Symfony ユーザー会メーリングリストまでご連絡ください。