注:これらの例では、HTML :: formfu :: Model :: DBICを使用しています。 HTML::FormFu V02.005の時点で、HTML :: Formfu :: Model :: DBICモジュールはHTML::FormFuにバンドルされておらず、スタンドアロン分布で利用できます。
use HTML::FormFu;
my $form = HTML::FormFu->new;
$form->load_config_file('form.yml');
$form->process( $cgi_query );
if ( $form->submitted_and_valid ) {
# do something with $form->params
}
else {
# display the form
$template->param( form => $form );
}触媒を使用している場合、より適切な例は次のとおりです。
package MyApp::Controller::User;
use Moose;
extends 'Catalyst::Controller::HTML::FormFu';
sub user : Chained CaptureArgs(1) {
my ( $self, $c, $id ) = @_;
my $rs = $c->model('Schema')->resultset('User');
$c->stash->{user} = $rs->find( $id );
return;
}
sub edit : Chained('user') Args(0) FormConfig {
my ( $self, $c ) = @_;
my $form = $c->stash->{form};
my $user = $c->stash->{user};
if ( $form->submitted_and_valid ) {
$form->model->update( $user );
$c->res->redirect( $c->uri_for( "/user/$id" ) );
return;
}
$form->model->default_values( $user )
if ! $form->submitted;
}注:触媒コントローラーによって「プロセス」が自動的に呼び出されるためです。要素の追加や変更、制約の追加など、アクションメソッド内のフォームに変更を加える場合。 「提出された_and_valid」を使用する前に、「プロセス」を再度呼び出す必要があります。「送信フォーム値とエラー」または「送信フォームの変更」またはフォームのレンダリングにリストされているメソッドのいずれかを使用する必要があります。
基本的なログインフォームを作成する構成ファイルの例を以下に示します(ここでの例はすべてYAMLですが、config :: Anyでサポートされている任意のフォーマットを使用できます)。外部構成ファイルを使用するのではなく、Perlコードに直接フォームを作成することもできます。
---
action: /login
indicator: submit
auto_fieldset: 1
elements:
- type: Text
name: user
constraints:
- Required
- type: Password
name: pass
constraints:
- Required
- type: Submit
name: submit
constraints:
- SingleValueHTML :: FORMFUは、基本的なWebフォームに可能な限り簡単に使用できることを目的としたHTMLフォームフレームワークです。
Formfuの動作と出力のほぼすべての部分を構成できます。デフォルトでは、FormFUは「XHTML 1.0 Strict」準拠のマークアップをレンダリングし、可能な限り追加のマークアップをレンダリングしますが、CSSのみを変更することで幅広い出力スタイルを生成できるほど十分なCSSクラス名を使用します。
以下にリストされているすべてのメソッド(「new」を除く)は、 $formオブジェクトの通常のメソッドとして、または構成ファイルのオプションとして呼び出すことができます。例は、主にYAML構成構文に表示されます。
このドキュメントは、四角い括弧[]に囲まれたメソッドの引数がオプションであり、他のすべての引数が必要であるという条約に従います。
引数:[%オプション]
返品値:$ form
新しいHTML :: formfuオブジェクトを作成します。
HTML :: formfuオブジェクトで呼び出すことができるすべての方法は、代わりに「new」への引数として渡される場合があります。
my $form = HTML::FormFu->new({
action => '/search',
method => 'GET',
auto_fieldset => 1,
}); 引数:$ filename
引数: @FileNames
返品値:$ form
ファイル名のファイル名またはリストを受け入れます。そのファイル名は、config :: anyによって認識される任意の形式である必要があります。
各構成ファイルのコンテンツは「入力」に渡されるため、フォームに追加されます。
「load_config_file」は、任意のフォームでロードされる可能性のある単一の構成ファイルに共通の設定を保持できるように、構成ファイル自体で呼び出される場合があります。
---
load_config_file:
- file1
- file2YAML単一のファイル内の複数のドキュメント。ドキュメント開始マーカーは、3回のダッシュを含む線です。複数のファイル名が与えられたかのように、複数のドキュメントが順番に適用されます。
次の例では、要素が追加された後に別の構成ファイルをロードするために複数のドキュメントが利用されます。 (これが単一のドキュメントである場合、ファイルの位置に関係なく、 load_config_fileがelementsの前に呼び出されます)。
---
elements:
- name: one
- name: two
---
load_config_file: ext.yml相対パスは、設定されている場合は「config_file_path」ディレクトリから解決されます。
構成ファイルの整理に関するアドバイスについては、「ベストプラクティス」を参照してください。
引数:%オプション
定義されている場合、引数はデータを作成するために使用されます:: visitor :: callbackオブジェクトは、「load_config_file」で使用されます。
たとえば、以下のコードは、「load_config_file」を呼び出すときに「.yml」で終了する「.yml」で終了する構成値を動的に変更するフォームにコールバックを追加します。
$form->config_callback({
plain_value => sub {
my( $visitor, $data ) = @_;
s/.yml/.yaml/;
}
});デフォルト値:定義されていません
この方法は、特別な「継承されたアクセサーズ」です。つまり、フォーム、ブロック要素、または単一の要素に設定できます。値が読み取られると、値が定義されていない場合、ブロック要素を介して、フォームまでの要素の階層を自動的に通過し、定義された値を検索します。
引数:%オプション
返品値:$ form
渡された各オプションキー/値は、任意のHTML :: formfuメソッド名と引数です。
複数の値を設定したり、単一のメソッドコールを使用して複数の要素をフォームに追加する簡単な方法を提供します。
メソッド名を半intelligent順序で呼び出す試み(詳細についてはHTML::FormFu::ObjectUtilのpopulate()のソースを参照)。
引数:%デフォルト
返品値:$ form
単一のハッシュREFから複数のフィールドのデフォルト値を設定します。
ハッシュレフのキーは、フォームフィールドの名前に対応し、値はフィールドのデフォルトメソッドに渡されます。
これは、すべてのフィールドがフォームに追加され、「プロセス」が呼び出される前に呼び出される必要があります(それ以外の場合は、フォームをレンダリングする前に再び「プロセス」を呼び出します)。
引数:$ directory_name
「config_file_path」は、「load_config_file」に絶対パスが与えられていない場合、構成ファイルが検索される場所を定義します。
デフォルト値:定義されていません
この方法は、特別な「継承されたアクセサーズ」です。つまり、フォーム、ブロック要素、または単一の要素に設定できます。値が読み取られると、値が定義されていない場合、ブロック要素を介して、フォームまでの要素の階層を自動的に通過し、定義された値を検索します。
継承アクセサです。
引数:$ field_name
引数:&coderef
「インジケータ」がフィールド名に設定されている場合、「送信」は「そのフィールド名の値が送信された場合にtrueが返されます。
「インジケータ」がコードREFに設定されている場合、2つの引数$formと$query持つサブルーチンと呼ばれ、その返品値は「送信」の返品値として使用されます。
「インジケータ」が設定されていない場合、「既知のフィールド名の値が送信された場合、「インジケータ」が設定されていない場合、「trueが返されます」。
引数:1
引数:%オプション
返品値:$ fieldset
この設定は、ほとんどの基本的なフォームに適しており、一般的にフィールドセットの追加を自分で無視できることを意味します。
$form->auto_fieldset(1)を呼び出すと、すぐにフィールドセット要素がフォームに追加されます。その後、 $form->elements()フォームに直接ではなく、そのフィールドセットにすべての要素(フィールドセットを除く)を追加します。
具体的には、フォームの最後のフィールドセットに要素が追加されるため、別のフィールドセットを追加すると、そのフィールドセットにさらに要素が追加されます。
また、HashrefをAuto_Fieldset()に渡すことができます。これは、作成された最初のFieldSetのデフォルトを設定するために使用されます。
いくつかの例とその出力を実証するために:
フィールドセットのない2つの要素。
---
elements:
- type: Text
name: foo
- type: Text
name: bar
<form action="" method="post">
<div class="text">
<input name="foo" type="text" />
</div>
<div class="text">
<input name="bar" type="text" />
</div>
</form>「auto_fieldset」を持つ2つの要素。
---
auto_fieldset: 1
elements:
- type: Text
name: foo
- type: Text
name: bar
<form action="" method="post">
<fieldset>
<div class="text">
<input name="foo" type="text" />
</div>
<div class="text">
<input name="bar" type="text" />
</div>
</fieldset>
</form>3番目の要素は、新しいフィールドセット内にあります
---
auto_fieldset: { id: fs }
elements:
- type: Text
name: foo
- type: Text
name: bar
- type: Fieldset
- type: Text
name: baz
<form action="" method="post">
<fieldset id="fs">
<div class="text">
<input name="foo" type="text" />
</div>
<div class="text">
<input name="bar" type="text" />
</div>
</fieldset>
<fieldset>
<div class="text">
<input name="baz" type="text" />
</div>
</fieldset>
</form>この動作のため、ネストされたフィールドセットが必要な場合は、ネストされた各フィールドセットを意図した親に直接追加する必要があります。
my $parent = $form->get_element({ type => 'Fieldset' });
$parent->element('fieldset'); 引数:$ string
通常、入力エラーにより、適切なフォームフィールドに沿ってエラーメッセージが表示されます。フォームの上部に一般的なエラーメッセージを表示する場合は、「form_error_message」でメッセージを設定できます。
メッセージのCSSクラスを設定するには、「form_error_message_class」を参照してください。
メッセージを表示するために使用されるマークアップを変更するには、 form_error_messageテンプレートファイルを編集します。 「render_method」を参照してください。
出力アクセターです。
真の場合、フィールドエラーがない場合でも「form_error_message」を表示します。
引数:%デフォルト
指定されたタイプのすべての要素、制約などに追加されるデフォルトを設定し、その後フォームに追加されます。
たとえば、すべてのText要素を自動的に10のサイズにし、すべてのStrftimeデフレーターを自動的にSTRFTIMEセットを%d/%m/%Yにします。
default_args:
elements:
Text:
size: 10
deflators:
Strftime:
strftime: '%d/%m/%Y'すべてのDateTime要素を自動的に自動的に取得する例は、適切なStrftime DeflatorとDateTimeインフレータを取得します。
default_args:
elements:
DateTime:
deflators:
type: Strftime
strftime: '%d-%m-%Y'
inflators:
type: DateTime
parser:
strptime: '%d-%m-%Y'特別なケースとして、 elementsキーBlock 、 Field 、 Inputを使用して、HTML :: formfu :: element :: blockから継承する要素を一致させることもdoesます。
各elementsキーは、 |を使用してanyリストを含めることができます。仕切り:例
# apply the given class to any Element of type Password or Button
default_args:
elements:
'Password|Button':
attrs:
class: novalidate各elementsキーリストには、指定されたタイプの祖先を持つ要素のみを一致させるための+から始まるタイプを含めることができます。
# only apple the given class to an Input field within a Multi block
default_args:
elements:
'Input|+Multi':
attrs:
class: novalidate各elementsキーリストには、与えられたタイプの祖先を持たない要素のみを一致させるために-始まるタイプを含めることができます。
# apply the given class only to Input fields that are not in a Multi block
default_args:
elements:
'Input|-Multi':
attrs:
class: validate引数は、 Block 、 Field 、 Input 、 $type最小限の順序で最小限に適用されます。これらのそれぞれの中で、引数は最短から最長の最後まで適用されます。
typeキーは、html :: formfu :: elementの「タイプ」などのtypeで返される値と一致する必要があります。たとえば、 HTML::FormFu::Element::* namespaceの外側にカスタム要素がある場合、 $form->element({ type => '+My::Custom::Element' })を介してロードする場合、「default_args」に与えられるキーは、返品されたtype()値の削除されたものであるため、リーディング+を含めるべきではありません。例:
# don't include the leading '+' here
default_args:
elements:
'My::Custom::Element':
attrs:
class: whatever
# do include the leading '+' here
elements:
- type: +My::Custom::Element「default_args」は、単一のハッシュレフを生成して「copulate」に渡され、各タイプの引数を順番にマージする - 「植民地」は合計で1回のみ呼び出されます - 各タイプでは1回ではありません。スカラー値がマージされていないため - これは、後の値が以前の値をオーバーライドすることを意味します。
# Normally, calling $field->add_attrs({ class => 'input' })
# then calling $field->add_attrs({ class => 'not-in-multi' })
# would result in both values being retained:
# class="input not-in-multi"
#
# However, default_args() creates a single data-structure to pass once
# to populate(), so any scalar values will overwrite earlier ones
# before they reach populate().
#
# The below example would result in the longest-matching key
# overwriting any others:
# class="not-in-multi"
#
default_args:
elements:
Input:
add_attrs:
class: input
'Input:-Multi':
add_attrs:
class: not-in-multi注:「要素」のエイリアスである「要素」などのエイリアスを持つ適切なメソッドとは異なり、 default_argsに与えられるキーは複数形の形式でなければなりません。
default_args:
elements: {}
deflators: {}
filters: {}
constraints: {}
inflators: {}
validators: {}
transformers: {}
output_processors: {} 設定されている場合、コンテンツはフォームの上部内にあるscriptタグ内にレンダリングされます。
引数:$ url
引数: @urls
「JavaScript」セクションの直前に、各URLのscriptタグを追加します。
引数:[%private_stash]
返品値:%スタッシュ
フォームに関連付けたいデータを保存できるハッシュレフを提供します。
---
stash:
foo: value
bar: value 引数:$タイプ
引数:%オプション
返品値:$要素
引数: @arrayref_of_types_or_options
返品値:@Elements
フォームに新しい要素を追加します。 HTML :: formfu :: formfu :: formfu :: formfu ::コア要素のリストの「その他のコア要素」の「コアフォームフィールド」を参照してください。
HTML::FormFu::Element::以外の名前空間から要素をロードする場合は、 +をプレフィックスすることにより、完全に適格なパッケージ名を使用できます。
---
elements:
- type: +MyApp::CustomElement
name: foo %optionsでtypeが提供されていない場合、デフォルトのTextが使用されます。
「要素」は「要素」のエイリアスです。
引数:$タイプ
引数:%オプション
返品値:$ deflator
引数: @arrayref_of_types_or_options
返品値:@deflators
デフレーターは、任意のフォームフィールドに関連付けられている場合があり、オブジェクトである可能性のある値で$フィールド - >デフォルトを提供できます。
オブジェクトがディスプレイに適切な値にstringifyにしない場合、デフレーターは、フォームフィールドが代わりに適切な文字列値を受信することを確認できます。
コアデフレーターのリストについては、HTML :: formfu :: deflatorの「コアデフレーター」を参照してください。
name属性が提供されていない場合、新しいデフレーターが作成され、フォーム上のすべてのフィールドに追加されます。
HTML::FormFu::Deflator::以外の名前空間にデフラーターをロードする場合は、 +をプレミキシングすることで、完全に適格なパッケージ名を使用できます。
「Deflator」は「Deflators」のエイリアスです。
引数:$ new_element、$ expsting_element
返品値:$ new_element
最初の引数は追加したい要素でなければなりません。2番目の引数は、新しい要素を前に配置する必要がある既存の要素でなければなりません。
my $new = $form->element(%specs);
my $position = $form->get_element({ type => $type, name => $name });
$form->insert_before( $new, $position );上記の例の最初の行では、 $new要素が最初にフォームの最後に追加されます。ただし、 insert_beforeメソッドは$new Elementを補償するため、フォームの最後にはなくなります。このため、あるフォームから別のフォームに要素をコピーしようとすると、コピーするのではなく、要素を「盗む」ことができます。この場合、 cloneを使用する必要があります。
my $new = $form1->get_element({ type => $type1, name => $name1 })
->clone;
my $position = $form2->get_element({ type => $type2, name => $name2 });
$form2->insert_before( $new, $position ); 引数:$ new_element、$ expsting_element
返品値:$ new_element
最初の引数は、追加したい要素でなければなりません。2番目の引数は、新しい要素を後に配置する必要がある既存の要素でなければなりません。
my $new = $form->element(%specs);
my $position = $form->get_element({ type => $type, name => $name });
$form->insert_after( $new, $position );上記の例の最初の行では、 $new要素が最初にフォームの最後に追加されます。ただし、 insert_afterメソッドは$new要素を補償するため、フォームの最後にはなくなります。このため、あるフォームから別のフォームに要素をコピーしようとすると、コピーするのではなく、要素を「盗む」ことができます。この場合、 cloneを使用する必要があります。
my $new = $form1->get_element({ type => $type1, name => $name1 })
->clone;
my $position = $form2->get_element({ type => $type2, name => $name2 });
$form2->insert_after( $new, $position ); 引数:$要素
返品値:$要素
フォームまたはブロックの子供の配列から$elementを削除します。
$form->remove_element( $element );孤立した要素は、「insert_before」または「insert_after」を使用してフォームまたはブロックに再び取り付けられるまで、何かに対して有用に使用することはできません。
HTML :: FORMFUは、伝統的に検証として説明されているもののためのいくつかの段階を提供します。これらは:
最初の段階であるフィルターは、エンコード、リーディング/トレーリングホワイトスペースの削除、クレジットカード番号から非桁の文字の削除など、ユーザー入力のクリーンアップを可能にします。
以下のすべての段階では、より複雑な処理が可能になり、それぞれが入力エラーを表すために例外をスローできるようにするメカニズムがあります。各段階では、次の段階が進むには、すべてのフォームフィールドをエラーなしで処理する必要があります。エラーがある場合は、フォームをユーザーに再ディスプレイして、正しい値を入力できるようにする必要があります。
制約は、「これは整数ですか?」、「この値は範囲内ですか?」など、値の低レベルの検証を目的としています。または「これは有効なメールアドレスですか?」。
インフレータは、値を適切なオブジェクトに変換できるようにすることを目的としています。結果のオブジェクトは、後続のバリデーターと変圧器に渡され、「パラメーション」と「パラマ」によっても返されます。
バリデーターは、「このユーザー名は一意ですか?」などのビジネスロジックやデータベースの制約などの高レベルの検証を目的としています。すべての制約とインフレータがエラーなしで実行されている場合にのみ、バリデーターは実行されます。ほとんどのバリデーターはアプリケーション固有のものであるため、それぞれがHTML :: formfuユーザーによって書かれた別のクラスとして実装されることが予想されます。
引数:$タイプ
引数:%オプション
返品値:$フィルター
引数: @arrayref_of_types_or_options
返品値:@filters
nameまたはnames値を提供する場合、フィルターはその名前のフィールドに追加されます。 nameまたはnames値を提供しない場合、フィルターはフォームに既に添付されているすべてのフィールドに追加されます。
HTML :: formfu ::フィルターの「コアフィルター」を参照して、コアフィルターのリストを参照してください。
HTML::FormFu::Filter::以外の名前空間にフィルターをロードする場合は、 +をプレフィックスすることにより、完全に適格なパッケージ名を使用できます。
「フィルター」は「フィルター」のエイリアスです。
引数:$タイプ
引数:%オプション
返品値:$制約
引数: @arrayref_of_types_or_options
返品値:@constraints
コア制約のリストについては、HTML :: FORMFU ::制約の「コア制約」を参照してください。
name属性が提供されていない場合、フォーム上のすべてのフィールドに新しい制約が作成され、追加されます。
HTML::FormFu::Constraint::以外の名前空間に制約をロードする場合は、 +をプレフィックスすることにより、完全に適格なパッケージ名を使用できます。
「制約」は「制約」のエイリアスです。
引数:$タイプ
引数:%オプション
返品値:$インフレータ
引数: @arrayref_of_types_or_options
返品値:@inflators
コアインフレータのリストについては、HTML :: formfu :: inflatorの「コアインフレータ」を参照してください。
name属性が提供されていない場合、新しいインフレータが作成され、フォーム上のすべてのフィールドに追加されます。
HTML::FormFu::Inflator::以外の名前空間にインフレータをロードする場合は、 +をプレフィックスすることで、完全に適格なパッケージ名を使用できます。
「インフレータ」は「インフレータ」のエイリアスです。
引数:$タイプ
引数:%オプション
返品値:$ validator
引数: @arrayref_of_types_or_options
返品値:@validators
コアバリデーターのリストについては、HTML :: formfu :: validatorの「コアバリデーター」を参照してください。
name属性が提供されていない場合、フォーム上のすべてのフィールドに新しいバリデーターが作成され、追加されます。
HTML::FormFu::Validator::以外の名前空間にバリデーターをロードする場合は、 +をプレフィックスすることで、完全に適格なパッケージ名を使用できます。
「Validator」は「Validators」のエイリアスです。
引数:$タイプ
引数:%オプション
返品値:$ Transformer
引数: @arrayref_of_types_or_options
返品値:@transformers
コアトランスのリストについては、html :: formfu ::トランスの「コアトランス」を参照してください。
name属性が提供されていない場合、フォーム上のすべてのフィールドに新しい変圧器が作成され、追加されます。
HTML::FormFu::Transformer::以外の名前空間に変圧器をロードする場合は、 +をプレフィックスすることで、完全に適格なパッケージ名を使用できます。
「トランス」は「トランス」のエイリアスです。
提出後にフォームを再配置する際のデフォルトの動作は、フィールドに元の変更されていないユーザーがサビされた値を含むことです。
「render_processed_value」が真である場合、すべてのフィルター、インフレータ、トランスが実行された後、フィールド値が最終結果になります。デフレーターも値に基づいて実行されます。
これをインフレータを使用してフィールドに設定するが、同等のデフレーターがない場合は、ユーザーを混乱させたり悩ませたりしないように、インフレータが使用可能な値に戻るようにする必要があります。
デフォルト値:false
この方法は、特別な「継承されたアクセサーズ」です。つまり、フォーム、ブロック要素、または単一の要素に設定できます。値が読み取られると、値が定義されていない場合、ブロック要素を介して、フォームまでの要素の階層を自動的に通過し、定義された値を検索します。
継承アクセサです。
ユーザーの入力に関係なく、制約を強制的に失敗させます。
これが実行時に呼び出された場合、フォームが既に処理された後、フォームをユーザーに再表示する前に、HTML :: formfuの「プロセス」と呼び出す必要があります。
デフォルト値:false
この方法は、特別な「継承されたアクセサーズ」です。つまり、フォーム、ブロック要素、要素、または単一の制約に設定できます。値が読み取られると、値が定義されていない場合、ブロック要素を介して、フォームまでの要素の階層を自動的に通過し、定義された値を検索します。
継承アクセサです。
Trueの場合、「パラメージ」、「パラマ」、「有効」を引き起こし、名前がアンダースコア_で始まるフィールドを無視します。
フィールドはまだ正常に処理されており、エラーは「提出された_and_valid」がfalseを返します。
デフォルト値:false
すべての属性は、レンダリングフォームの開始タグに追加されます。
# Example
---
attributes:
id: form
class: fancy_form属性アクセターです。
属性の短いカットです。
デフォルト値: ""
フォームに関連付けられたアクションを取得または設定します。デフォルトはアクションなしで、ほとんどのブラウザが現在のURIに送信されます。
属性の短いカットです。
フォームのエンコードタイプを取得または設定します。有効な値はapplication/x-www-form-urlencodedおよびmultipart/form-dataです。
フォームにファイル要素が含まれている場合、enctypeは自動的にmultipart/form-dataに設定されます。
属性の短いカットです。
デフォルト値:「投稿」
フォームの送信に使用されるメソッドを取得または設定します。 「投稿」または「取得」のいずれかに設定できます。
属性の短いカットです。
フォームのタイトル属性を取得または設定します。
属性の短いカットです。
フォームの上部に表示されるエラーメッセージのクラス属性。
「form_error_message」を参照してください
引数:[ @Languages]
ローカリゼーションオブジェクトに渡される言語のリスト。
デフォルト値:['en']
引数:[$ class_name]
デフォルトのローカリゼーションオブジェクトに使用されるクラス名。
デフォルト値: 'html :: formfu :: i18n'
引数:[$ key、@arguments]
locale :: maketextのmaketextメソッドと互換性があります。
引数:$ locale
現在、html :: formfu :: deflator :: formatnumberおよびhtml :: formfu :: filter :: formatnumberでのみ使用されます。
この方法は、特別な「継承されたアクセサーズ」です。つまり、フォーム、ブロック要素、または単一の要素に設定できます。値が読み取られると、値が定義されていない場合、ブロック要素を介して、フォームまでの要素の階層を自動的に通過し、定義された値を検索します。
継承アクセサです。
引数:[$ query_object]
引数:%params
CGI互換クエリオブジェクトまたは送信された名前/値のハッシュREFを提供します。または、クエリオブジェクトを「プロセス」オブジェクトに直接渡すことができます。
引数:[$ query_type]
「クエリ」を提供するために使用されているモジュールを設定します。
Catalyst :: Controller :: HTML :: FormFUは、これをCatalystに自動的に設定します。
有効な値は、 CGI 、 Catalyst 、 CGI::Simple 。
デフォルト値:「CGI」
引数:[$ query_object]
引数:[%params]
提供されたクエリオブジェクトまたは入力値を処理します。 「提出されたフォーム値とエラー」および「送信フォームの変更」に記載されているメソッドのいずれかを呼び出す前に、 processを呼び出す必要があります。
また、フォームを印刷したり、「render」または「render_data」を呼び出す前に、 processも少なくとも1回は呼び出されなければなりません。
Catalyst :: Controller :: html :: formfuのユーザーへの注意:「プロセス」がCatalystコントローラーによって自動的に呼び出されるためです。要素の追加や変更、制約の追加など、アクションメソッド内のフォームに変更を加える場合。 「提出された_and_valid」を使用する前に、「プロセス」を再度呼び出す必要があります。「送信フォーム値とエラー」または「送信フォームの変更」またはフォームのレンダリングにリストされているメソッドのいずれかを使用する必要があります。
フォームが提出されている場合、trueを返します。これが計算方法の詳細については、「インジケータ」を参照してください。
$form->submitted && !$form->has_errors shorthand
返品値:%params
エラーがなかったすべての有効な入力のハッシュレフを返します。
引数:$ field_name
「PARAM」のより信頼性の高い推奨バージョン。リストのコンテキストで呼び出されているかどうかに関係なく、常に単一の値を返すことが保証されます。複数の値が送信された場合、これは最初の値のみを返します。値が無効であるか、フォームが送信されなかった場合、 undefを返します。これにより、単一の値が必要なリストコンテキストでの使用に適しています。
$db->update({
name => $form->param_value('name'),
address => $form->param_value('address),
}); 引数:$ field_name
コンテキストに関係なく、複数の値が送信されたかどうかに関係なく、常に値の配列を返すことが保証されています。値が無効であるか、フォームが送信されない場合、空の配列を返します。
引数:$ field_name
コンテキストに関係なく、常に値のリストを常に返すことが保証されています。値が無効であるか、フォームが送信されない場合、空のリストを返します。
引数:[$ field_name]
返品値:$ input_value
返品値:@valid_names
その動作は予測が困難であるため、使用することをお勧めしなくなりました。代わりに、「param_value」、「param_array」、または「param_list」を使用します。
(readonly)CGIの方法と同様の方法。
フィールド名が指定されている場合、List-contextでそのフィールドに送信された有効な値を返し、Scalar-contextでは、そのフィールドに送信された有効な値の最初のみを返します。
引数が与えられていない場合は、エラーなしですべての有効な入力フィールド名のリストを返します。
1つ以上の引数を渡すことは致命的なエラーです。
引数:[$ field_name]
返品値:@valid_names
返品値:$ bool
フィールド名が与えられた場合、そのフィールドにエラーがなく、エラーがある場合はfalseある場合はtrueを返します。
引数が与えられていない場合は、エラーなしですべての有効な入力フィールド名のリストを返します。
引数:[$ field_name]
返品値:@names
返品値:$ bool
フィールド名が与えられた場合、そのフィールドにエラーがあり、エラーがない場合はfalseある場合はtrueを返します。
引数が与えられていない場合は、エラーがあるすべての入力フィールド名のリストを返します。
引数:[%オプション]
引数:[%オプション]
返品値: @errors
形式のすべてのフィールドから例外オブジェクトの配列を返します。
返された結果を絞るために、 name 、 type 、 stage両方の引数を受け入れます。
$form->get_errors({
name => 'foo',
type => 'Regex',
stage => 'constraint'
}); 引数:[%オプション]
引数:[%オプション]
返品値:$エラー
「get_errors」と同じ引数を受け入れますが、最初に見つかったエラーのみを返します。
詳細と利用可能なモデルについては、HTML :: FORMFU :: Modelを参照してください。
引数:$ model_name
デフォルト値:「DBIC」
引数:[$ model_name]
返品値:$モデル
引数:%config
引数:$ name、$ value
返品値:$値
提供された値は、指定されたフィールドの現在の値を置き換えます。この値は、「パラメーション」と「パラマ」への後続の呼び出しで返され、指定されたフィールドは「有効」の計算に含まれます。
提出されたフォームからすべてのエラーを削除します。
返品値:$ string
フォームを構築した後、「レンダリング」を呼び出す前に、「プロセス」を1回呼び出す必要があります。
返品値:$ string
フォーム開始タグと、「form_error_message」と「javascript」の出力を返します。
返品値:$ string
フォームエンドタグを返します。
返品値:$ string
すべての非表示のフォームフィールドを返します。
HTML::FormFu 、プラグインをフォームまたは要素に簡単に追加して、デフォルトの動作または出力を変更できるプラグインシステムを提供します。
詳細については、html :: formfu ::プラグインを参照してください。
デフォルトでは、FormFuは「XHTML 1.0 Strict」準拠のマークアップをレンダリングし、可能な限り追加のマークアップを使用します。プログラムで生成されたCSSクラス名を追加するために、多くのフックが提供されており、CSSのみを変更することで広範囲の出力スタイルを生成できるようにします。
マークアップの基本的なカスタマイズは、レイアウトおよびmulti_layoutメソッドを介して可能です。これにより、ラベル、コメント、エラーメッセージ、入力タグなど、各フィールドのさまざまな部分の位置を並べ替えたり、希望する他の任意のタグを挿入したりすることができます。
これで十分でない場合は、HTML :: formfuにテンプレートツールキットやテンプレート::合金などの外部レンダリングエンジンを使用するように指示することで、マークアップを完全にパーソナライズできます。詳細については、「render_method」と「tt_module」を参照してください。
html :: formfuを設定してテンプレート:: toolkitを使用してレンダリングする場合でも、forms、 <TMPL_VAR form> :: formfuは、html ::テンプレートであるかどうかにかかわらず、独自の<form tal:replace="form"></form>レイアウトに使用する他のテンプレートシステムと組み合わせて使用できます<!-- {form} --> 。
HTML::FormFu v1.00の時点で、TTは必要な前提条件ではなくなりました。テンプレートファイルを使用する場合は、手動でインストールする必要があります。
デフォルト値: string
ttに設定して、外部テンプレートファイルを使用してフォームを生成できます。
マークアップをカスタマイズするには、アプリケーションにローカルのテンプレートファイルのコピーが必要です。詳細については、html :: formfu :: manual :: cookbookの「TTテンプレートのインストール」を参照してください。
その要素の「render_method」をttに設定することにより、単一の要素のマークアップをカスタマイズできますが、フォームの残りの部分はデフォルトのstring render-methodを使用します。ただし、フォームまたはブロックの「render_method」をttに設定してから、子要素の「render_method」をstringに設定すると、その設定は無視され、子要素はtt render-methodを使用することに注意してください。
---
elements:
- name: foo
render_method: tt
filename: custom_field
- name: bar
# in this example, 'foo' will use a custom template,
# while bar will use the default 'string' rendering methodこの方法は、特別な「継承されたアクセサーズ」です。つまり、フォーム、ブロック要素、または単一の要素に設定できます。値が読み取られると、値が定義されていない場合、ブロック要素を介して、フォームまでの要素の階層を自動的に通過し、定義された値を検索します。
継承アクセサです。
フォームに使用されるテンプレートファイル名を変更します。
デフォルト値:「フォーム」
引数:[%constructor_arguments]
「render_method」に渡された議論のハッシュrefを受け入れます。これは、「render」によって内部的に呼ばれます。
TT_ARGS内では、キーのRELATIVEおよびRECURSION 、テンプレートエンジンの基本的な要件であるため、常に真実になるようにオーバーライドされています。
html :: formfuのテンプレートファイルを含むシステムディレクトリは、 INCLUDE_PATHの最後に常に追加されるため、コアテンプレートファイルが見つかります。カスタマイズ目的でテンプレートファイルの独自のコピーがある場合にのみ、自分で設定する必要があります。
この方法は、特別な「継承されたアクセサーズ」です。つまり、フォーム、ブロック要素、または単一の要素に設定できます。値が読み取られると、値が定義されていない場合、ブロック要素を介して、フォームまでの要素の階層を自動的に通過し、定義された値を検索します。
引数:[%constructor_arguments]
ハッシュREF引数が「TT_ARGS」の既存のハッシュREF値とマージされることを保証します。
デフォルト値:テンプレート
「render_method」がttに設定されているときに使用されるモジュール。テンプレートと互換性のあるインターフェイスを提供する必要があります。
この方法は、特別な「継承されたアクセサーズ」です。つまり、フォーム、ブロック要素、または単一の要素に設定できます。値が読み取られると、値が定義されていない場合、ブロック要素を介して、フォームまでの要素の階層を自動的に通過し、定義された値を検索します。
通常、「レンダリング」と暗黙的に呼ばれます。通常、 stringまたはttレンダーメソッドに渡されるデータ構造を返します。
「レンダリング」と同様に、フォームを構築した後、「render_data」を呼び出す前に、「プロセス」を1回呼び出す必要があります。
「render_data」のように、子どもの要素のデータは含まれていません。
引数:[%オプション]
引数:[%オプション]
返品値: @Elements
フォームのすべてのフィールドを返します(具体的には、HTML :: formfu :: element値に真の「is_field」を持つすべての要素)。
nameとtype引数の両方を受け入れて、返された結果を絞り込みます。
$form->get_fields({
name => 'foo',
type => 'Radio',
});また、結果を検索するためのRegexpも受け入れます。
$form->get_elements({
name => qr/oo/,
}); 引数:[%オプション]
引数:[%オプション]
返品値:$要素
「get_fields」と同じ引数を受け入れますが、最初に見つかったフィールドのみを返します。
引数:[%オプション]
引数:[%オプション]
返品値: @Elements
すべてのトップレベルの要素をフォームで返します(再帰的ではありません)。再帰バージョンについては、「get_all_elements」を参照してください。
nameとtype引数の両方を受け入れて、返された結果を絞り込みます。
$form->get_elements({
name => 'foo',
type => 'Radio',
});また、結果を検索するためのRegexpも受け入れます。
$form->get_elements({
name => qr/oo/,
}); 引数:[%オプション]
引数:[%オプション]
返品値:$要素
「get_elements」と同じ引数を受け入れますが、最初に見つかった要素のみを返します。
再帰バージョンについては、「get_all_element」を参照してください。
引数:[%オプション]
引数:[%オプション]
返品値: @Elements
形式のすべての要素を再帰的に返します。
オプションで、 nameとtype両方の引数を受け入れて、返された結果を絞り込みます。
# return all Text elements
$form->get_all_elements({
type => 'Text',
});また、結果を検索するためのRegexpも受け入れます。
$form->get_elements({
name => qr/oo/,
});非再帰バージョンについては、「get_elements」を参照してください。
引数:[%オプション]
引数:[%オプション]
返品値:$要素
「get_all_elements」と同じ引数を受け入れますが、最初に見つかった要素のみを返します。
# return the first Text field found, regardless of whether it's
# within a fieldset or not
$form->get_all_element({
type => 'Text',
});また、結果を検索するためのRegexpも受け入れます。
$form->get_elements({
name => qr/oo/,
});非再帰バージョンについては、「get_all_elements」を参照してください。
引数:[%オプション]
引数:[%オプション]
返品値: @deflators
すべてのフィールドからすべてのトップレベルのデフレーターを返します。
nameとtype引数の両方を受け入れて、返された結果を絞り込みます。
$form->get_deflators({
name => 'foo',
type => 'Strftime',
}); 引数:[%オプション]
引数:[%オプション]
返品値:$要素
「get_deflators」と同じ引数を受け入れますが、最初に見つけたデフレーターのみを返します。
引数:[%オプション]
引数:[%オプション]
Return Value: @filters
Returns all top-level filters from all fields.
Accepts both name and type arguments to narrow the returned results.
$form->get_filters({
name => 'foo',
type => 'LowerCase',
}); Arguments: [%options]
Arguments: [%options]
Return Value: $filter
Accepts the same arguments as "get_filters", but only returns the first filter found.
Arguments: [%options]
Arguments: [%options]
Return Value: @constraints
Returns all constraints from all fields.
Accepts both name and type arguments to narrow the returned results.
$form->get_constraints({
name => 'foo',
type => 'Equal',
}); Arguments: [%options]
Arguments: [%options]
Return Value: $constraint
Accepts the same arguments as "get_constraints", but only returns the first constraint found.
Arguments: [%options]
Arguments: [%options]
Return Value: @inflators
Returns all inflators from all fields.
Accepts both name and type arguments to narrow the returned results.
$form->get_inflators({
name => 'foo',
type => 'DateTime',
}); Arguments: [%options]
Arguments: [%options]
Return Value: $inflator
Accepts the same arguments as "get_inflators", but only returns the first inflator found.
Arguments: [%options]
Arguments: [%options]
Return Value: @validators
Returns all validators from all fields.
Accepts both name and type arguments to narrow the returned results.
$form->get_validators({
name => 'foo',
type => 'Callback',
}); Arguments: [%options]
Arguments: [%options]
Return Value: $validator
Accepts the same arguments as "get_validators", but only returns the first validator found.
Arguments: [%options]
Arguments: [%options]
Return Value: @transformers
Returns all transformers from all fields.
Accepts both name and type arguments to narrow the returned results.
$form->get_transformers({
name => 'foo',
type => 'Callback',
}); Arguments: [%options]
Arguments: [%options]
Return Value: $transformer
Accepts the same arguments as "get_transformers", but only returns the first transformer found.
Returns a deep clone of the $form object.
Because of scoping issues, code references (such as in Callback constraints) are copied instead of cloned.
For the basic method, eg /attributes :
Arguments: [%attributes]
Arguments: [%attributes]
Return Value: $form
As a special case, if no arguments are passed, the attributes hash-ref is returned. This allows the following idioms.
# set a value
$form->attributes->{id} = 'form';
# delete all attributes
%{ $form->attributes } = ();All methods documented as 'attribute accessors' also have the following variants generated:
*_xml can be used as a setter, and ensures that its argument is not XML-escaped in the rendered form.
*_loc can he used as a setter, and passes the arguments through "localize".
add_* can be used to append a word to an attribute without overwriting any already-existing value.
# Example
$form->attributes({ class => 'fancy' });
$form->add_attributes({ class => 'pants' });
# class="fancy pants" add_*_xml , like add_* , but ensures it doesn't get XML-escaped.
add_*_loc , like add_* , but passing the arguments through "localize".
del_* can be used to remove a word from an attribute value.
# Example
$form->attributes({ class => 'fancy pants' });
$form->del_attributes({ class => 'pants' });
# class="fancy" del_*_xml , like del_* , but ensures it doesn't get XML-escaped.
del_*_loc , like del_* , but passing the arguments through "localize".
Also, any attribute method-name which contains the word attributes also has aliases created for all these variants, with the word attributes replaced by attrs .
# For example, the attributes() method would have all these variant
# methods available
$form->attributes({ class => 'fancy' });
$form->attributes_xml({ title => '<b>fancy</b>' });
$form->attributes_loc({ title => 'fancy' });
$form->add_attributes({ class => 'fancy' });
$form->add_attributes_xml({ title => '<b>fancy</b>' });
$form->add_attributes_loc({ title => 'fancy' });
$form->del_attributes({ class => 'fancy' });
$form->del_attributes_xml({ title => '<b>fancy</b>' });
$form->del_attributes_loc({ title => 'fancy' });
# Because the method contains the word 'attributes', it also gets the
# following short-forms
$form->attrs({ class => 'fancy' });
$form->attrs_xml({ title => '<b>fancy</b>' });
$form->attrs_loc({ title => 'fancy' });
$form->add_attrs({ class => 'fancy' });
$form->add_attrs_xml({ title => '<b>fancy</b>' });
$form->add_attrs_loc({ title => 'fancy' });
$form->del_attrs({ class => 'fancy' });
$form->del_attrs_xml({ title => '<b>fancy</b>' });
$form->del_attrs_loc({ title => 'fancy' });All methods documented as 'attribute short-cuts' are short-cuts to directly access individual attribute key/values.
# Example
$form->id( 'login' );
$id = $form->id;
# is equivalent to:
$form->attributes({ id => 'login' });
$id = $form->attributes->{id}; All attribute short-cuts also have a *_xml variant.
# Example
$form->id_xml( $xml );
# is equivalent to:
$form->attributes_xml({ id => $xml }); All attribute short-cuts also have a *_loc variant.
# Example
$form->title_loc( $key );
# is equivalent to:
$form->attributes_loc({ title => $key });All methods documented as 'inheriting accessors' can be set on the form, a block element or a single field element. When the value is read, if no value is defined it automatically traverses the element's hierarchy of parents, searching for a defined value.
All inherited accessors also have a *_no_inherit variant, which can be used as a getter to fetch any defined value, without traversing the hierarchy of parents. This variant cannot be used as a setter.
Eg, the "auto_id" has a variant named auto_id_no_inherit .
All methods documented as 'output accessors' also have *_xml and *_loc variants.
The *_xml variant can be used as a setter, and ensures that its argument is not XML-escaped in the rendered form.
The *_loc variant can be used as a setter, and passes the arguments through "localize".
Eg, the label method has variants named label_xml and label_loc .
To support boolean attributes, whose value should either be equal to the attribute name, or empty. Any true value will switch the attribute 'on', any false value will remove the attribute.
# Example
$field->autofocus(1);
# equivalent to:
$field->attributes({ autofocus => 'autofocus' });
$field->autofocus(0);;
# equivalent to:
delete $field->attributes->{autofocus};Some attributes support character substitutions: the following substitutions are possible:
%f # $form->id
%n # $field->name
%t # lc( $field->type )
%r # $block->repeatable_count
%s # $error->stageThese allow each field to have consistent attributes, while remaining unique.
We try our best to not make incompatible changes, but if they're required we'll make every effort possible to provide backwards compatibility for several release-cycles, issuing a warnings about the changes, before removing the legacy features.
v1.00 dropped most of the default HTML class-names, with the intention that each application should define just what it needs, without needing to reset unwanted options first. We also gain the benefit of less markup being generated, speeding up both render and HTTP transfers.
To restore the previous behaviour, set the following options.
If you're using best practices, you'll only need to set these once per-application in your app-wide config file.
---
auto_container_class: '%t'
auto_container_label_class: 'label'
auto_container_comment_class: 'comment'
auto_comment_class: 'comment'
auto_container_error_class: 'error'
auto_container_per_error_class: 'error_%s_%t'
auto_error_class: 'error_message error_%s_%t'See "DEPRECATED METHODS" in HTML::FormFu::Role::Element::Field.
See also "REMOVED METHODS" in HTML::FormFu::Element.
Has been removed; see "default_args" instead.
Has been removed; use "default_model" instead.
Has been removed; use "default_values" in HTML::FormFu::Model instead.
Has been removed; use "update" in HTML::FormFu::Model instead.
It is advisable to keep application-wide (or global) settings in a single config file, which should be loaded by each form.
See "load_config_file".
HTML::FormFu::Manual::Cookbook
HTML::FormFu::Manual::Unicode
The distribution directory examples/vertically-aligned contains a form with example CSS for a "vertically aligned" theme.
This can be viewed by opening the file vertically-aligned.html in a web-browser.
If you wish to experiment with making changes, the form is defined in file vertically-aligned.yml , and the HTML file can be updated with any changes by running the following command (while in the distribution root directory).
perl examples/vertically-aligned/vertically-aligned.pl This uses the Template Toolkit file vertically-aligned.tt , and the CSS is defined in files vertically-aligned.css and vertically-aligned-ie.css .
HTML::FormFu::Imager
Catalyst::Controller::HTML::FormFu
HTML::FormFu::Model::DBIC
Brian Cassidy
Ozum Eldogan
Ruben Fonseca
Ronald Kimball
Daisuke Maki
Andreas Marienborg
Mario Minati
Steve Nolte
Moritz Onken
Doug Orleans
Matthias Dietrich
Dean Hamstead
Karen Etheridge
Nigel Metheringham
Based on the original source code of HTML::Widget, by Sebastian Riedel, [email protected] .
Carl Franks <[email protected]>
This software is copyright (c) 2018 by Carl Franks.
これはフリーソフトウェアです。 you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.