Home | Symfony2Doc »リファレンスドキュメント »Form Type リファレンス »file フィールドタイプ

ご注意

Symfony2日本語翻訳ドキュメントは内容が古くなっております。公式サイトの英語ドキュメントを参照してください。

Note

  • 対象バージョン:2.3 (2.1以降)
  • 翻訳更新日:2013/11/23

file フィールドタイプ

file タイプはフォームにファイルを挿入する機能を果たします.

対応するタグ input file フィールド
継承された オプション
親タイプ form
クラス FileType

基本的な使い方

このような定義のフォームがあったとして、:

$builder->add('attachment', 'file');

フォームが送信されると, attachment フィールドが UploadedFile のインスタンスになります. これは 添付ファイルを一時的な場所から保存先に移動させるために使用することができます。:

use Symfony\Component\HttpFoundation\File\UploadedFile;

public function uploadAction()
{
    // ...

    if ($form->isValid()) {
        $someNewFilename = ...

        $form['attachment']->getData()->move($dir, $someNewFilename);

        // ...
    }

    // ...
}

move() メソッドは引数としてディレクトリ名とファイル名を受け取ります。 以下のいずれかの方法でファイル名を計算します:

// 元のままのファイル名を使う
$file->move($dir, $file->getClientOriginalName());

// ランダムなファイル名にし、拡張子を推測する (より安全な方法)
$extension = $file->guessExtension();
if (!$extension) {
    // 拡張子が推測できなかった場合
    $extension = 'bin';
}
$file->move($dir, rand(1, 99999).'.'.$extension);

元のままのファイル名と getClientOriginalName() を使う方法はエンドユーザーから操作されてしまう可能性があるため安全ではありません。 さらに、 許可されない文字列がファイル名に含まれてしまう可能性もあるので、事前に名前をサニタイズすることを推奨します。

cookbook にファイルアップロードと Doctrine の entity との紐付けを管理する方法の例が掲載されています。

継承されたオプション

これらのオプションは form タイプを継承しています。:

required

データ型: Boolean デフォルト: true

trueの場合は HTML5 の required 属性 がレンダリングされます。 対応する label もまた required クラスをレンダリングします。

これらは表面的でバリデーションからは独立しています。Symfonyに フィールドタイプを推測することを許可する場合は、 このオプションの値はバリデーションの情報から推測されるのが理想的でしょう。

label

データ型: string デフォルト: フィールド名から推測されたものです。

フィールドがレンダリングされる際にラベルが設定されます。false が設定されるとラベルは表示されません。 ラベルはテンプレート内部で設定することもできます。

{{ render_label(form.name, 'Your name') }}

read_only

データ型: Boolean デフォルト: false

このオプションが true の場合、そのフィールドは readonly 属性付きでレンダリングされるため、編集する事が出来ません。

disabled

データ型: boolean デフォルト: false

ユーザにフィールドの値を変更させたくない場合は、 disabled オプションを true にします。どんなサブミットされた値も無視されます。

error_bubbling

データ型: Boolean デフォルト: false フォームに限り compound

true の場合、このフィールドのエラーは親フィールドまたはフォームに渡されます。 たとえば、通常のフィールドを true に設定した場合、フィールドに対するエラーは 特定のフィールドではなくメインのフォームに付加されます。

error_mapping

データ型: array デフォルト: empty

このオプションはバリデーションエラーの対象を編集することができます。

matchingCityAndZipCode という名前のメソッドを持っているとして、それが city および zip code が一致するかの検証をするとします。しかし残念なことに、 “matchingCityAndZipCode” フィールドがフォームに無いため、 Symfony ができるのはフォームの上部にエラーを表示することです。

カスタマイズされたエラーマッピングを使うと、city フィールドの上にエラーを表示するように、より上手にエラーをマップできます。:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'error_mapping' => array(
            'matchingCityAndZipCode' => 'city',
        ),
    ));
}

こちらが左側、右側のマッピングするルールです:

  • 左側はプロパティパスを有します。
  • クラスのプロパティまたはメソッドで違反が生成された場合、そのパスは単に “propertyName” です。
  • array または ArrayAccess オブジェクトで違反が生成された場合、プロパティパスは [indexName] です。
  • ドットでプロパティを分離し、それらを連結して、ネストされたプロパティパスを作成することができます。たとえば addresses[work].matchingCityAndZipCode のように。
  • 左側のエラーマッピングは単一のドット . も認められます。それはフィールド自体をさしています。フィールドに追加されたエラーはネストされたフィールドの代わりに付与されたことを意味します。
  • 右側は単にフォームのフィールド名を有します。

mapped

データ型: boolean

オブジェクトを読み込んでいるまたは書き込んでいる間、フィールドが無視されるようにしたい場合は、 mapped オプションを false にしてください。

blog comments powered by Disqus