![]() |
|
symfony Forms in Action付録 A - ウィジェット |
|
You are currently reading "symfony Forms in Action" which is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.
sfWidget 基底クラス sfWidgetForm 基底クラス sfWidgetFormInput sfWidgetFormInputCheckbox sfWidgetFormInputHidden sfWidgetFormInputPassword sfWidgetFormInputFile sfWidgetFormInputFileEditable sfWidgetFormTextarea sfWidgetFormTextareaTinyMCE sfWidgetFormDate sfWidgetFormTime sfWidgetFormDateTime sfWidgetFormI18nDate sfWidgetFormI18nTime sfWidgetFormI18nDateTime sfWidgetFormDateRange sfWidgetFormJQueryDate sfWidgetFormI18nChoiceCountry sfWidgetFormI18nChoiceLanguage sfWidgetFormI18nChoiceCurrency sfWidgetFormI18nChoiceTimezone sfWidgetFormFilterInput sfWidgetFormFilterDate sfWidgetFormSchema setLabel()、getLabel()、setLabels()、getLabels() setDefault()、getDefault()、setDefaults()、getDefaults() setHelp()、setHelps()、getHelps()、getHelp() getPositions()、setPositions()、moveField() sfWidgetFormSchemaDecorator 
|
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License. |
symfony フォームフレームワークにはたくさんの便利なウィジェットが搭載されています。これらのウィジェットは大半のプロジェクトの共通のニーズをカバーします。この章では symfony に搭載されているデフォルトのフォームウィジェットを説明します。sfFormExtraPlugin、sfPropelPlugin と sfDoctrinePlugin プラグインのフォームウィジェットも含まれています。これらのプラグインには symfony のコアチームによってサポートされているとても便利なウィジェットもいくつか含まれています。
symfony MVC フレームワークを使わない場合でも、プロジェクトのどこかに
widget/ディレクトリを設置することでsfFormExtraPlugin、sfPropelPluginとsfDoctrinePluginプラグインに含まれているウィジェットを利用できます。
それぞれのウィジェットのくわしい内容に飛び込む前に、ウィジェットの共通機能を見てみましょう。
sfWidget 基底クラスすべての symfony ウィジェットは sfWidget 基底クラスを継承します。
この基底クラスはいくつかのデフォルト機能をすべてのウィジェットに提供します。
デフォルトでは、すべてのウィジェットは XHTML としてレンダリングされます。
setXhtml() メソッドを呼び出して HTML に切り替えることができます。
sfWidget::setXhtml(false);
ウィジェットシステムはエスケープされた HTML 属性と気の利いた内容で自動的に構成されます。効率よくするには、プロジェクトで使われている文字集合をシステムに伝えることが必要です。文字集合のデフォルトは UTF-8 で、setCharset() メソッドを呼び出すことで文字集合のデフォルトを変更できます。
sfWidget::setCharset('ISO-8859-1');
symfony MVC フレームワークでウィジェットを使う場合、
settings.ymlファイルの charset の値にしたがって、文字集合は自動的に設定されます。
ウィジェットが JavaScript ファイルもしくは/かつスタイルシートに依存する場合、getJavaScripts() と getStylesheets() メソッドをそれぞれオーバーライドできます。
class Widget extends sfWidget { public function getStylesheets() { // 配列のキーはファイルのパスで // 値はコロン (,) で区切られたメディアの名前 return array( '/path/to/file.css' => 'all', '/another/file.css' => 'screen,print', ); } public function getJavaScripts() { return array('/path/to/file.js', '/another/file.js'); } }
sfWidgetForm 基底クラスこの節では、フォームウィジェットに限定して説明します。これらすべてのウィジェットは sfWidgetForm 基底クラスを継承します。追加のデフォルト機能をいくつか提供するために、この基底クラスは sfWidget クラスを継承します。
ウィジェットを作るとき、複数のオプションと HTML 属性を追加の引数に渡すことができます。
$w = new sfWidgetFormInputText( array('default' => 'Fabien'), array('class' => 'foo') );
setOptions() と setAttributes() メソッドを呼び出すことで、オプションと HTML 属性をそれぞれセットすることもできます。
$w = new sfWidgetFormInputText(); $w->setOptions(array('default' => 'Fabien')); $w->setAttributes(array('class' => 'foo'));
setOption() と setAttribute() メソッドを呼び出すことで、個別のオプションと HTML 属性をそれぞれセットできます。
$w = new sfWidgetFormInputText(); $w->setOption('default', 'Fabien'); $w->setAttribute('class', 'foo');
render() メソッドを呼び出せば、ウィジェットはレンダリングされます。
$w->render('name', 'value', array('class' => 'foo'));
render() メソッドは次の引数をとります。
ウィジェットはステートレスなので、単独のウィジェットインスタンスは好きなだけ異なる数の引数だけレンダリングできます。
上記のウィジェットは次のようにレンダリングされます。
<input class="foo" type="text" name="bar" id="bar" value="value"/>
sfWidgetForm で定義されているデフォルトのオプションは次のとおりです。
| オプション | 説明 |
|---|---|
is_hidden |
フォームウィジェットが hidden であることが必須であれば true そうでなければ false (デフォルトは false) |
needs_multipart |
ウィジェットが multipart/form-data を必要とするのであれば true、そうでなければ false (デフォルトは false) |
default |
ウィジェットがレンダリングされる際に使われるルデフォルト値 |
label |
ウィジェットがウィジェットスキーマによってレンダリングされるときに使うラベル |
id_format |
生成される id 属性のフォーマット (デフォルトは %s) |
デコレーションなしで隠しウィジェットをレンダリングするためにウィジェットフォームスキーマクラスは
is_hiddenオプションを使います。formタグがレンダリングされるとき、enctype="multipart/form-data"属性を追加するためにフォームクラスはneeds_multipartオプションを使います。
sfWidgetForm クラスはすべてのオプションに対するアクセサメソッドも提供します。
is_hidden: isHidden()、setHidden()needs_multipart: needsMultipartForm()default: getValue()、setValue()label: getLabel()、setLabel()id_format: getIdFormat()、setIdFormat()フォームウィジェットスキーマは1つもしくは複数の別のウィジェットのラッパーウィジェットです。
次の節では、ウィジェットは複数のカテゴリに再分類されます。
sfWidgetFormChoicesfWidgetFormDatesfWidgetFormDateRangesfWidgetFormDateTimesfWidgetFormDoctrineChoicesfWidgetFormFilterInputsfWidgetFormFilterDatesfWidgetFormI18nChoiceCountrysfWidgetFormI18nChoiceLanguagesfWidgetFormI18nChoiceCurrencysfWidgetFormI18nChoiceTimezonesfWidgetFormI18nDatesfWidgetFormI18nDateTimesfWidgetFormI18nTimesfWidgetFormInputsfWidgetFormInputCheckboxsfWidgetFormInputFilesfWidgetFormInputFileEditablesfWidgetFormInputHiddensfWidgetFormInputPasswordsfWidgetFormJQueryAutocompletersfWidgetFormJQueryDatesfWidgetFormPropelChoicesfWidgetFormReCaptchasfWidgetFormSchemasfWidgetFormSchemaDecoratorsfWidgetFormSelectsfWidgetFormSelectDoubleListsfWidgetFormSelectManysfWidgetFormSelectCheckboxsfWidgetFormSelectRadiosfWidgetFormTextareasfWidgetFormTextareaTinyMCEsfWidgetFormTimesfWidgetFormInputinput タグはおそらくもっともシンプルなフォームタグで sfWidgetFormInput クラスによってあらわされます。
| オプション | 説明 |
|---|---|
type |
type 属性の値 (デフォルトは text) |
$w = new sfWidgetFormInputText(); echo $w->render('foo'); # <input type="text" name="foo" id="foo" />
sfWidgetFormInputCheckboxsfWidgetFormInputCheckbox は type 属性に checkbox の値が指定されている入力ウィジェットです。
$w = new sfWidgetFormInputCheckbox(); echo $w->render('foo'); # <input type="checkbox" name="foo" id="foo" />
sfWidgetFormInputHiddensfWidgetFormInputHidden は type 属性に hidden の値が指定されている入力ウィジェットです。is_hidden オプションに true がセットされています。
$w = new sfWidgetFormInputHidden(); echo $w->render('foo'); # <input type="hidden" name="foo" id="foo" />
sfWidgetFormInputPasswordsfWidgetFormInputPassword は type 属性に password の値が指定されている入力ウィジェットです。
$w = new sfWidgetFormInputPassword(); echo $w->render('foo'); # <input type="password" name="foo" id="foo" />
sfWidgetFormInputFilesfWidgetFormInputFile は type 属性に file の値が指定されている入力ウィジェットです。needs_multipart オプションに true が自動的にセットされます。
$w = new sfWidgetFormInputFile(); echo $w->render('foo'); # <input type="file" name="foo" id="foo" />
sfWidgetFormInputFileEditablesfWidgetFormInputFileEditable は入力ファイルウィジェットで、以前アップロードされたファイルを表示もしくは削除する機能を追加するために、sfWidgetFormInputFile ウィジェットを拡張します。
| オプション | 説明 |
|---|---|
file_src |
現在の画像の Web ソースのパス (必須) |
edit_mode |
ブール値: 編集モードを有効にするには true、そうでなければ false |
is_image |
ファイルが表示可能なファイルであるかどうか |
with_delete |
削除のチェックボックスを追加するかどうか |
delete_label |
テンプレートによって使われる削除ラベル |
template |
このウィジェットをレンダリングするために使われる HTML テンプレート |
| 利用可能なプレースホルダ: | |
* input (画像のアップロードウィジェット) |
|
* delete (削除のチェックボックス) |
|
* delete_label (削除ラベルのテキスト) |
|
* file (ファイルタグ) |
editモードにおいて、このウィジェットは「_delete」をサフィックスとするファイルアップロードウィジェットから名づけられた追加ウィジェットをレンダリングします。 ですので、フォームを作る際には、この追加フィールドのバリデータを追加することをお忘れなく。
sfWidgetFormTextareasfWidgetFormTextarea ウィジェットは必須の rows と cols 属性のデフォルト値を自動的にセットします。
$w = new sfWidgetFormTextarea(); echo $w->render('foo'); # <textarea rows="4" cols="30" name="foo" id="foo"></textarea>
sfWidgetFormTextareaTinyMCEWYSIWYG エディタウィジェットをレンダリングしたい場合、sfWidgetFormTextareaTinyMCE ウィジェットを使います。
$w = new sfWidgetFormTextareaTinyMCE( array(), array('class' => 'foo') );
このウィジェットは symfony の
sfFormExtraPluginプラグインの一部です。
TinyMCE の JavaScript ファイルはプラグインに搭載されていないので、自分でインストールしなければなりません。
| オプション | 説明 |
|---|---|
theme |
TinyMCE のテーマ (デフォルトは advanced) |
width |
幅 |
height |
高さ |
config |
JavaScript 固有の設定の配列 |
ユーザーに選択可能なリストから選ばせたい場合に、HTML による選択肢の表現方法として次のようなものがあります。
select タグ:

multiple 属性をもつ select タグ:

type 属性に radio が指定されている input タグのリスト:

type 属性に checkbox が指定されている input タグのリスト:

しかし究極的には、これらすべてはユーザーが限られた選択肢の範囲で単独もしくは複数の選択を行うことを可能にします。
sfWidgetFormChoice ウィジェットは1つのウィジェットの範囲内ですべての利用可能なものを標準化します。これまで見てきたように、ウィジェットは選択を4つの HTML 表現のどれかにレンダリングする機能があります。これによって後で見るように独自の表現を定義することできます。
sfWidgetFormChoice はレンダリング作業を別のウィジェットにゆだねる特別なウィジェットです。
レンダリングは2つのオプション: expanded と multiple でコントロールされます。
expanded が false |
expanded が true |
|
|---|---|---|
multiple が false |
sfWidgetFormSelect |
sfWidgetFormSelectRadio |
multiple が true |
sfWidgetFormSelectMany |
sfWidgetFormSelectCheckbox |
自分自身をレンダリングする
sfWidgetFormChoiceによって使われるsfWidgetFormSelect、sfWidgetFormSelectMany、sfWidgetFormSelectCheckboxとsfWidgetFormSelectRadioウィジェットはほかのウィジェットと同じくプレーンなもので直接利用できます。 この節ではこれらの大半のドキュメントは書かれていないので、より柔軟なsfWidgetFormChoiceウィジェットのほうがおすすめです。
それぞれを実現するための HTML 表現は次のとおりです。
$w = new sfWidgetFormChoice(array( 'choices' => array('Fabien Potencier', 'Fabian Lange'), ));

$w = new sfWidgetFormChoice(array( 'multiple' => true, 'choices' => array('PHP', 'symfony', 'Doctrine', 'Propel', 'model'), ));

$w = new sfWidgetFormChoice(array( 'expanded' => true, 'choices' => array('published', 'draft', 'deleted'), ));

$w = new sfWidgetFormChoice(array( 'expanded' => true, 'multiple' => true, 'choices' => array('A week of symfony', 'Call the expert', 'Community'), ));

選択肢のグループ化は sfWidgetFormChoice ウィジェットによってサポートされ、choices オプションに入れ子の配列を渡すことで指定できます。
$choices = array( 'Europe' => array('France' => 'France', 'Spain' => 'Spain', 'Italy' => 'Italy'), 'America' => array('USA' => 'USA', 'Canada' => 'Canada', 'Brazil' => 'Brazil'), ); $w = new sfWidgetFormChoice(array('choices' => $choices));

expanded と multiple オプションも期待どおりに仕事をこなします。
$w = new sfWidgetFormChoice(array( 'choices' => $choices, 'expanded' => true, ));

レンダラウィジェットに使われるレイアウトもカスタマイズできます。
$w = new sfWidgetFormChoice(array( 'choices' => $choices, 'expanded' => true, 'renderer_options' => array('template' => '<strong>%group%</strong> %options%'), ));

オプションの組み合わせの例は次のとおりです。
$w = new sfWidgetFormChoice(array( 'choices' => $choices, 'multiple' => true, ));

$w = new sfWidgetFormChoice(array( 'choices' => $choices, 'multiple' => true, 'expanded' => true, 'renderer_options' => array('template' => '<strong>%group%</strong> %options%'), ));

ウィジェットがプレーンな
selectタグでレンダリングされるとき、標準のoptgroupタグが使われます。
ウィジェットによってサポートされているすべてのオプションのリストは次のとおりです。
| オプション | 説明 |
|---|---|
choices |
可能な選択肢の配列 (必須) |
multiple |
select タグが複数の選択肢を許可しなければならない場合 true をセットします |
expanded |
展開されたウィジェットを表示するには true にします |
renderer_class |
デフォルトの代わりに使うクラス |
renderer_options |
レンダラのコンストラクタに渡されるオプション |
renderer |
レンダラウィジェット (expanded と renderer_options オプションをオーバーライドします) |
choices オプションは次のようにあげられます: new sfCallable($thisWidgetInstance, 'getChoices') |
sfWidgetFormSelectCheckbox と sfWidgetFormSelectRadio ウィジェットは次のオプションをサポートしています。
| オプション | 説明 |
|---|---|
label_separator |
入力チェックボックス/ラジオボタンとラベルのあいだで使われる区切り文字 |
class |
<ul> タグのメインクラス |
separator |
それぞれの入力チェックボックス/ラジオボタンのあいだで使われる区切り文字 |
formatter |
チェックボックスの選択肢をフォーマットするために呼び出される callable |
| callable なフォーマッタはウィジェットと入力の配列を引数にとります | |
template |
オプションをグループにまとめる際に使われるテンプレート (%group% %options%) |
ユーザーが複数のオプションを選べるとき、別のボックスで選ばれたオプションを表示するほうがよい状況があります。
セレクトウィジェットを二重リストとしてレンダリングするために sfWidgetFormSelectDoubleList ウィジェットを使うことができます。
$w = new sfWidgetFormChoice(array( 'choices' => array('PHP', 'symfony', 'Doctrine', 'Propel', 'model'), 'renderer_class' => 'sfWidgetFormSelectDoubleList', ));

このウィジェットは symfony の
sfFormExtraPluginプラグインの一部です。
このウィジェットはカスタム JavaScript を使います。 ウィジェットの
getJavaScripts()メソッドを呼び出すことでこれらのパスの値を得ることができます。$files = $w->getJavascripts();
| オプション | 説明 (訳注:associatedとunassociated は図をご参照ください) |
|---|---|
choices |
利用可能な選択肢の配列 (必須) |
class |
ウィジェットのメインクラス |
class_select |
2つの select タグのクラス |
label_unassociated |
関連しない選択肢のラベル |
label_associated |
関連する選択肢のラベル |
unassociate |
関連しない選択肢のリンクの HTML |
associate |
関連する選択肢のリンクの HTML |
template |
このウィジェットをレンダリングするために使われる HTML テンプレート。 |
利用可能なプレースホルダ: %label_associated%, %label_unassociated%, %associate%, %unassociate%, %associated%, %unassociated%, %class% |
ユーザーがたくさんの選択肢のなかから要素を選べるようにしたい、これらすべての一覧をセンタボックスのなかで表示することが不可能になります。
sfWidgetFormJQueryAutocompleter はシンプルな input タグを自動入力セレクトボックスに変換することでこの問題を解決します。
このウィジェットは symfony の
sfFormExtraPluginプラグインの一部です。jQuery と jQuery UI はsfFormExtraPluginに搭載されていないので、手動でインストールする必要があります。
$w = new sfWidgetFormChoice(array( 'choices' => array(), 'renderer_class' => 'sfWidgetFormJQueryAutocompleter', 'renderer_options' => array('url' => '/autocomplete_script'), ));
このウィジェットはきちんと動くカスタム JavaScript とスタイルシートを使います。ウィジェットの
getJavaScripts()とgetStylesheets()メソッドを呼び出すことでこれらのパスの値を得ることができます。
url オプションはユーザーの入力にもとづいた選択肢を投入するためにウィジェットが呼び出す URL です。URL は2つのパラメータを受け入れます。
q: ユーザーが入力した文字列limit: 返す項目の最大数スクリプトは選択肢配列の有効な JSON 表記を返さなければなりません (配列を JSON に変換する PHP 標準関数の json_encode() を使います)。
| オプション | 説明 |
|---|---|
url |
選択肢を取得するために呼び出す URL (必須) |
config |
jQuery 自動入力補完ウィジェットを設定する JavaScript の配列 |
value_callback |
表示される前に値を変換するコールバック |
選択肢が Propel のモデルに関連しているのであれば、sfWidgetFormPropelJQueryAutocompleter ウィジェットは外部キーの検索に合わせて最適化されます。
$w = new sfWidgetFormChoice(array( 'renderer_class' => 'sfWidgetFormPropelJQueryAutocompleter', 'renderer_options' => array( 'model' => 'Article', 'url' => '/autocomplete_script', ), ));
| オプション | 説明 |
|---|---|
model |
モデルクラス (必須) |
method |
オブジェクトを文字列に変換するメソッド (デフォルトは __toString() マジックメソッド) |
選択肢が Propel モデルにバインドされる場合 (通常はユーザーによる外部キーの変更が許可されている場合)、 sfWidgetFormPropelChoice ウィジェットを使うことができます。
$w = new sfWidgetFormPropelChoice(array( 'model' => 'Article', 'add_empty' => false, ));
あなたが渡した model クラスに従って choices はウィジェットによって自動的に読み出されます。専用のオプションセットを通じてウィジェットを細かく調整できます。
| オプション | 説明 |
|---|---|
model |
Propel のモデルクラス (必須) |
add_empty |
最初に空の値を追加するかどうか (デフォルトは false) |
| オプションがブール値でなければ、値はテキストの値として使われる | |
method |
オブジェクトの値を表示するために使うメソッド (デフォルトは __toString() マジックメソッド) |
key_method |
オブジェクトのキーを表示するために使うメソッド (デフォルトは getPrimaryKey() メソッド) |
order_by |
2つのフィールドで構成された配列: |
* 結果によって並べ替えされるカラム (PhpName 形式でなければならない) |
|
* asc もしくは desc |
|
criteria |
オブジェクトを検索するときに使う基準 |
connection |
Propel のコネクションの名前 (デフォルトは null) |
multiple |
select タグが複数の選択肢を許可しなければならないときは true |
peer_method |
オブジェクトを取得するために使われるピアメソッド |
選択肢が Doctrine モデルにバインドされる場合 (通常はユーザーによる外部キーの変更が許可されている場合)、
sfWidgetFormDoctrineChoice ウィジェットを使うことができます。
$w = new sfWidgetFormDoctrineChoice(array( 'model' => 'Article', 'add_empty' => false, ));
渡した model クラスにしたがって、ウィジェットは choices を自動的に読み取ります。専用のオプションセットを通じてウィジェットの高度な調整が可能です。
| オプション | 説明 |
|---|---|
model |
モデルクラス (必須) |
add_empty |
最初に空の値を追加するかどうか (デフォルトは false) |
| オプションがブール値ではない場合、値はテキストの値として使われる | |
method |
オブジェクトの値を表示するために使われるメソッド (デフォルトは __toString() マジックメソッド) |
key_method |
オブジェクトのキーを表示するために使われるメソッド (デフォルトは getPrimaryKey() メソッド) |
order_by |
2つのフィールドで構成される配列: |
* 結果によって並べ替えされるカラム (PhpName フォーマットでなければならない) |
|
* asc もしくは desc |
|
query |
オブジェクトを読み取る際に使うクエリ |
connection |
Doctrine のコネクションの名前 (デフォルトでは null) |
multiple |
select タグが複数の選択肢を許可する場合は true |
table_method |
オブジェクトを取得するために使われるメソッド |
日付、時刻、もしくは日付と時刻に対して複数の select ボックスを提供することで、日付ウィジェットは日付の入力作業を簡略化します。symfony のすべての日付ウィジェットはいくつかの HTML タグによってあらわされます。これらはユーザーカルチャにしたがってカスタマイズすることも可能です。
すべての
selectボックスを避けることでユーザーが日付をより速く入力できることから日付に対してシンプルなinputタグを使うことを好む人がいます。 もちろん、日付のフォーマットはバリデータによってサーバーサイドで強制されます。 ありがたいことに、symfony の日付バリデータは理解と解析ができる日付フォーマットを自由自在に扱える強力なバリデータを提供します。
sfWidgetFormDatesfWidgetFormDate は日付ウィジェットをあらわします。

ユーザーによって投稿された値はウィジェットの名前の配列に保存されます。
$w = new sfWidgetFormDate(); $w->render('date'); # 投稿された値は `date` 配列になります # array( # 'date' => array( # 'day' => 15, # 'month' => 10, # 'year' => 2005, # ), # );
ウィジェットのふるまいはさまざまなオプションでカスタマイズできます。
| オプション | 説明 |
|---|---|
format |
日付フォーマットの文字列 (デフォルトは %month%/%day%/%year%) |
years |
年の select タグの配列 (オプション) |
months |
月の select タグの配列 (オプション) |
days |
日にちの select タグの配列 (オプション) |
can_be_empty |
ウィジェットが空の値を受け入れるかどうか (デフォルトはtrue) |
empty_values |
空の文字列に使われる値の配列 (デフォルトは year、month と day に対して空の文字列) |
format オプションを使って、デフォルトタグの並びをカスタマイズできます
(render() メソッドが呼び出されるとき、%year%、%month% と %day% プレースホルダは対応する select タグに置き換えられます)。
$w = new sfWidgetFormDate( array('format' => '%year% - %month% - %day%') );

デフォルトでは、現在の年から10年前後の年の select タグが投入されます。
これは years オプションを使って変更できます。
$years = range(2009, 2020); $w = new sfWidgetFormDate( array('years' => array_combine($years, $years)) );
years、months と days オプションは配列を受け入れます。キーは option タグの値で値はユーザーに表示される文字列です。
sfWidgetFormTimesfWidgetFormTime は時刻ウィジェットをあらわします。

ユーザーによって投稿された値はウィジェットの名前の配列に保存されます。
$w = new sfWidgetFormTime(); $w->render('time'); # 投稿された値は配列 time になります # array( # 'time' => array( # 'hour' => 12, # 'minute' => 13, # 'second' => 14, # ), # );
ウィジェットのふるまいは多くのオプションでカスタマイズできます。
| オプション | 説明 |
|---|---|
format |
時刻のフォーマットの文字列 (%hour%:%minute%:%second%) |
format_without_seconds |
秒数をともなわない時刻フォーマットの文字列 (%hour%:%minute%) |
with_seconds |
秒数の選択肢を含めるか (デフォルトは false) |
hours |
時刻の select タグの配列 (オプション) |
minutes |
分の select タグの配列 (オプション) |
seconds |
秒数の select タグの配列 (オプション) |
can_be_empty |
ウィジェットが空の値を受け入れるかどうか (デフォルトは true) |
empty_values |
空の値に使われる値の配列 |
(デフォルトは hours、minutes と seconds に対する空の文字列) |
デフォルトでは、ウィジェットは秒の選択肢を許可しません。with_seconds オプションに true をセットすることで変更できます。
$w = new sfWidgetFormTime(array('with_seconds' => true));
format オプションと format_without_seconds オプションを使うことでデフォルトタグの並びをカスタマイズできます
(render() メソッドが呼び出されるとき %hour%、%minute% と %second% プレースホルダは対応する select タグに置き換えられます)。
$w = new sfWidgetFormTime(array( 'with_seconds' => true, 'format' => '%hour% : %minute% : %second%', ));

すべての分もしくは秒を表示したくなければ、3つのタグそれぞれに対して独自の値を提供できます。
$seconds = array(0, 15, 30, 45); $w = new sfWidgetFormTime(array( 'with_seconds' => true, 'seconds' => array_combine($seconds, $seconds), ));

hours、minutes と seconds オプションは配列を受け入れます。キーは option タグの配列で値はユーザーに表示される文字列です。
sfWidgetFormDateTimesfWidgetFormDateTime ウィジェットは2つのサブウィジェット:
sfWidgetFormDate ウィジェットと sfWidgetFormTime ウィジェットをレンダリングするウィジェットです。
$w = new sfWidgetFormDateTime();

| オプション | 説明 |
|---|---|
date |
日付ウィジェットのオプション (sfWidgetFormDate をご参照ください) |
time |
時刻ウィジェットのオプション (sfWidgetFormTime をご参照ください) |
with_time |
時刻を含めるかどうか (デフォルトでは true) |
format |
日付と時刻ウィジェットの文字列のフォーマット |
(デフォルトは %date% %time%) |
デフォルトでは、日付と時刻ウィジェットに対して
sfWidgetFormDateとsfWidgetFormTimeのインスタンスが生成されます。getDateWidget()とgetTimeWidget()メソッドをオーバーライドすることでウィジェットによって使われるクラスを変更できます。
sfWidgetFormI18nDatesfWidgetFormI18nDate は標準の sfWidgetFormDate ウィジェットを拡張します。標準ウィジェットが月を数字として表示するのに対して、国際化対応ウィジェットはカルチャにしたがってこれらをローカライズされた文字列として表示します。
$w = new sfWidgetFormI18nDate(array('culture' => 'fr'));

月の文字列のフォーマットは month_format オプションで調整できます。
このウィジェットは3つの値: name (デフォルト)、short_name と number を受け入れます。
$w = new sfWidgetFormI18nDate(array( 'culture' => 'fr', 'month_format' => 'short_name', ));

カルチャにしたがって、ウィジェットは3つの異なる select ボックスの順序とそれらのあいだで使う区切り文字を理解します。
このウィジェットは symfony の国際化対応サブフレームワークに依存します。
sfWidgetFormI18nTimesfWidgetFormI18nTime は標準の sfWidgetFormTime ウィジェットを拡張します。
オプションとして渡されるユーザーカルチャにしたがって、ウィジェットは3つの異なる select ボックスとそれらのあいだで使われる区切り文字を理解します。
$w = new sfWidgetFormI18nTime(array('culture' => 'ar'));

このウィジェットは symfony の国際化対応サブフレームワークに依存します。
sfWidgetFormI18nDateTimesfWidgetFormI18nDateTime は2つのサブウィジェット: sfWidgetFormI18nDate ウィジェットと sfWidgetFormI18nTime ウィジェットをレンダリングするウィジェットです。
このウィジェットは symfony の国際化対応サブフレームワークに依存します。
sfWidgetFormDateRangesfWidgetFormDateRange ウィジェットは日付範囲の選択肢をあらわします。
$w = new sfWidgetFormDateRange(array( 'from_date' => new sfWidgetFormDate(), 'to_date' => new sfWidgetFormDate(), ));

| オプション | 説明 |
|---|---|
from_date |
変換前の日付ウィジェット (必須) |
to_date |
変換後の日付ウィジェット (必須) |
template |
ウィジェットをレンダリングするテンプレート |
(利用可能なプレースホルダ: %from_date%、%to_date%) |
ウィジェットをレンダリングするために使われるテンプレートは template オプションでカスタマイズできます。
$w = new sfWidgetFormDateRange(array( 'from_date' => new sfWidgetFormDate(), 'to_date' => new sfWidgetFormDate(), 'template' => 'Begin at: %from_date%<br />End at: %to_date%', ));

このウィジェットはより洗練された
sfWidgetFormFilterDateウィジェットの基底クラスです。
sfWidgetFormJQueryDatesfWidgetFormJQueryDate は jQuery UI でレンダリングされる日付ウィジェットをあらわします。
$w = new sfWidgetFormJQueryDate(array( 'culture' => 'en', ));
このウィジェットは symfony の
sfFormExtraPluginプラグインの一部です。 jQuery と jQuery UI はsfFormExtraPluginに搭載されていないのでこれらを手動でインストールする必要があります。
| オプション | 説明 |
|---|---|
image |
ウィジェットをあらわす画像パス (デフォルトは false) |
config |
jQuery の日付ウィジェットを設定する JavaScript の配列 |
culture |
ユーザーカルチャ |
このセクションのウィジェットは symfony の国際化対応サブフレームワークに依存します。
sfWidgetFormI18nChoiceCountrysfWidgetFormI18nChoiceCountry ウィジェットは国コードの選択肢をあらわします。
$w = new sfWidgetFormI18nChoiceCountry(array('culture' => 'fr'));

| オプション | 説明 |
|---|---|
culture |
国際対応した文字列に適用されるユーザーカルチャ (必須) |
countries |
国コードの配列 (ISO 3166) |
add_empty |
最初に空の値を追加するかどうか (デフォルトは false) |
| オプションがブール値でなければ、値はテキストとして扱われます。 |
sfWidgetFormI18nChoiceLanguagesfWidgetFormI18nChoiceLanguage は言語コードの選択肢をあらわします。
$w = new sfWidgetFormI18nChoiceLanguage(array('culture' => 'fr'));

| オプション | 説明 |
|---|---|
culture |
国際対応した文字列に適用されるユーザーカルチャ (必須) |
languages |
言語コードの配列 |
add_empty |
最初に空の値を追加するかどうか (デフォルトは false) |
| オプションがブール値でなければ、値はテキストとして扱われます。 |
sfWidgetFormI18nChoiceCurrencysfWidgetFormI18nChoiceCurrency は通貨コードの選択肢をあらわします。
$w = new sfWidgetFormI18nChoiceCurrency(array('culture' => 'fr'));

| オプション | 説明 |
|---|---|
culture |
国際化対応した文字列に使うカルチャ (必須) |
currencies |
使用する通貨コードの配列 |
add_empty |
最初に空の値を追加するかどうか (デフォルトは false) |
| オプションがブール値でなければ、値はテキストとして扱われます。 |
sfWidgetFormI18nChoiceTimezonesfWidgetFormI18nChoiceTimezone はタイムゾーンの選択肢をあらわします。
$w = new sfWidgetFormI18nChoiceTimezone(array('culture' => 'fr'));
| オプション | 説明 |
|---|---|
culture |
国際化対応した文字列に使われるカルチャ (デフォルトの値は en) |
add_empty |
最初の空の値を追加するかどうか (デフォルトでは false) |
| オプションの値がブール値でなければ、値はテキストとして扱われます。 |
sfFormExtraPluginプラグインには ReCaptcha プロジェクト をベースとするキャプチャウィジェットの sfWidgetFormReCaptcha が搭載されています。
$w = new sfWidgetFormReCaptcha(array( 'public_key' => 'RECAPTCHA_PUBLIC_KEY' ));
| オプション | 説明 |
|---|---|
public_key |
ReCaptcha の公開鍵 |
use_ssl |
SSL を使うかどうか (デフォルトは false) |
server_url |
HTTP API の URL |
server_url_ssl |
HTTPS API の URL (use_ssl オプションに true がセットされている場合にかぎり使われます) |
public_key オプションは ReCaptcha の公開鍵です。
API のキーは無料で入手できます。
ReCaptcha の API に関するくわしい説明は ReCaptcha のサイト をご覧ください。
ReCaptcha フィールドの名前を変更することはできないので、HTTP リクエストからフォームをバインドするとき、これらを手動で追加しなければなりません。
たとえば、フォームが contact[%s] ネームフォーマットをもっている場合、キャプチャ情報が残りのフォームに投稿された値にマージされることを保証するために必要なコードは次のとおりです。
$captcha = array( 'recaptcha_challenge_field' => $request->getParameter('recaptcha_challenge_field'), 'recaptcha_response_field' => $request->getParameter('recaptcha_response_field'), ); $submittedValues = array_merge( $request->getParameter('contact'), array('captcha' => $captcha) );
このウィジェットは sfValidatorReCatpcha バリデータと一緒に使われます。
フィルタウィジェットは特別なウィジェットで、フィルタとしてふるまうフォームをレンダリングするために使うことができます。
sfWidgetFormFilterInputsfWidgetFormFilterInput はテキストのフィルタをあらわします。
デフォルトでは、ユーザーが空のテキストを検索できるようにするチェックボックスがこのウィジェットに含まれています。
| オプション | 説明 |
|---|---|
with_empty |
空のチェックボックスを追加するかどうか (デフォルトでは true) |
empty_label |
空のチェックボックスを利用する際に使われるラベル |
template |
ウィジェットをレンダリングするために使われるテンプレート |
利用可能なプレースホルダ: %input%、%empty_checkbox%、%empty_label% |
sfWidgetFormFilterDatesfWidgetFormFilterDate は日付の範囲をフィリタリングするウィジェットをあらわします。デフォルトでは、ユーザーが空の日付を検索できるようにするチェックボックスがこのウィジェットに含まれます。
| オプション | 説明 |
|---|---|
with_empty |
空のチェックボックスを追加するかどうか (デフォルトでは true) |
empty_label |
空のチェックボックス利用時に使われるラベル |
template |
ウィジェットをレンダリングするために使われるテンプレート |
利用可能なプレースホルダ: %date_range%、%empty_checkbox%、%empty_label% |
sfWidgetFormSchemasfWidgetFormSchema ウィジェットはいくつかのフィールドで構成されるウィジェットをあらわします。フィールドは名前つきのシンプルなウィジェットです。
$w = new sfWidgetFormSchema(array( 'name' => new sfWidgetFormInputText(), 'country' => new sfWidgetFormI18nChoiceCountry(), ));
フォームは
sfWidgetFormSchemaクラスのウィジェットスキーマで定義されます。
sfWidgetFormSchema コンストラクタは5つのオプション引数をとります。
利用可能なオプションは次のとおりです。
| オプション | 説明 |
|---|---|
name_format |
入力名の sprintf パターン (デフォルトでは %s) |
form_formatter |
フォームフォーマッタの名前 (table と list が搭載されており、table がデフォルト) |
すべてのフォームに対してデフォルトのフォーマッタを変更したい場合、setDefaultFormFormatterName() メソッドを呼び出します。
sfWidgetFormSchema::setDefaultFormFormatterName('list');
sfWidgetFormSchema クラスは sfWidgetForm クラスを継承するので、すべてのメソッドとふるまいを継承します。
sfWidgetFormSchemaオブジェクトはコンテナタグではなくウィジェットの「rows」だけをレンダリングします (tableフォーマッタに対してtable、もしくはlistに対してul):<Table> <?php echo $ws->render('') ?> </table>
埋め込みのウィジェットにアクセスするために sfWidgetFormSchema を配列として使うことができます。
$ws = new sfWidgetFormSchema(array('name' => new sfWidgetFormInputText())); $nameWidget = $ws['name']; unset($ws['name']);
ウィジェットフォームスキーマがフォームに埋め込まれるとき、ウィジェット自身ではなく、テンプレートにバインドされるフィールドにアクセスする権限があなたに付与されます。 くわしい説明はフォームのリファレンスの章をご参照ください。
ほかのスキーマのように、ウィジェットスキーマをネストにできます。
$ws = new sfWidgetFormSchema(array( 'title' => new sfWidgetFormInputText(), 'author' => new sfWidgetFormSchema(array( 'first_name' => new sfWidgetFormInputText(), 'last_name' => new sfWidgetFormInputText(), )), ));
埋め込みのウィジェットスキーマに配列記法でアクセスできます。
$ws['author']['first_name']->setLabel('First Name');
次の節において、ウィジェットスキーマクラスのメインメソッドが説明されていますが、すべてのメソッドのリストに関して、オンラインの API ドキュメントをご参照ください。
setLabel()、getLabel()、setLabels()、getLabels()setLabel()、getLabel()、setLabels() と getLabels() メソッドは埋め込みウィジェットのラベルを管理します。
これらはウィジェットの getLabel() と setLabel() メソッドのプロキシメソッドです。
$ws = new sfWidgetFormSchema(array('name' => new sfWidgetFormInputText())); $ws->setLabel('name', 'Fabien'); // 上記のコードは下記のコードと同等です $ws['name']->setLabel('Fabien'); // もしくは $ws->setLabels(array('name' => 'Fabien'));
setLabels() メソッドは渡された値を既存の値にマージします。
setDefault()、getDefault()、setDefaults()、getDefaults()setDefault()、getDefault()、setDefaults() と getDefaults() メソッドは埋め込みウィジェットのデフォルト値を管理します。
これらはウィジェットの getDefault() と setDefault() メソッドのプロキシメソッドです。
$ws = new sfWidgetFormSchema(array('name' => new sfWidgetFormInputText())); $ws->setDefault('name', 'Fabien'); // 上記のコードは下記のコードと同等です $ws['name']->setDefault('Fabien'); // もしくは $ws->setDefaults(array('name' => 'Fabien'));
setDefaults() メソッドは渡された値を既存の値にマージします。
setHelp()、setHelps()、getHelps()、getHelp()setHelp()、setHelps()、getHelps() getHelp() メソッドは埋め込みウィジェットに関連したヘルプメッセージを管理します。
$ws = new sfWidgetFormSchema(array('name' => new sfWidgetFormInputText())); $ws->setHelp('name', 'Fabien'); // 上記のコードは下記のコードと同等です $ws->setHelps(array('name' => 'Fabien'));
setHelps() メソッドは受け取った値を既存の値にマージします。
getPositions()、setPositions()、moveField()ウィジェットスキーマに含まれるフィールドの並べ替えが行われます。
順番は moveField() メソッドで変更できます。
$ws = new sfWidgetFormSchema(array( 'first_name' => new sfWidgetFormInputText(), 'last_name' => new sfWidgetFormInputText() )); $ws->moveField('first_name', sfWidgetFormSchema::AFTER, 'last_name');
定数は次のとおりです。
sfWidgetFormSchema::FIRSTsfWidgetFormSchema::LASTsfWidgetFormSchema::BEFOREsfWidgetFormSchema::AFTERsetPositions() メソッドですべての位置を変更することも可能です。
$ws->setPositions(array('last_name', 'first_name'));
sfWidgetFormSchemaDecoratorsfWidgetFormSchemaDecorator ウィジェットは任意の HTML スニペット内部のフォームスキーマウィジェットをラッピングするプロキシウィジェットスキーマです。
$ws = new sfWidgetFormSchema(array('name' => new sfWidgetFormInputText())); $wd = new sfWidgetFormSchemaDecorator($ws, '<table>%content%</table>');
フォームが別のフォームに埋め込まれるときこのウィジェットが symfony の内部で使われます。
If you find a typo or an error, please register and open a ticket.
If you need support or have a technical question, please post to the official user mailing-list.