注意:這些示例利用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是一個HTML表單框架,其目的是盡可能容易地用於基本的Web表單,但具有執行您可能想做的其他任何操作的力量和靈活性(只要它涉及表單)。
您可以配置FormFu行為和輸出的幾乎任何部分。默認情況下,FormFu渲染“ XHTML 1.0嚴格”合規標記,並具有盡可能少的額外標記,但是具有足夠的CSS類名稱,以允許僅通過更改CSS來生成大量的輸出樣式。
下面列出的所有方法(“新”除外)可以作為$form對像上的普通方法或配置文件中的選項稱為普通方法。示例將主要顯示在YAML配置語法中。
該文檔遵循以下慣例,即被方[]所包圍的方法是可選的,並且需要所有其他參數。
參數:[%選項]
返回值:$表格
創建一個新的HTML :: FormFu對象。
可以將可以在HTML :: FormFu對像上調用的任何方法作為參數傳遞給“新”。
my $form = HTML::FormFu->new({
action => '/search',
method => 'GET',
auto_fieldset => 1,
}); 參數:$ filename
參數: @filenames
返回值:$表格
接受文件名或文件名列表,該文件名稱應為Config :: Any識別的任何格式。
每個配置文件的內容傳遞給“填充”,因此將其添加到表單中。
可以在配置文件本身中調用“ load_config_file”,以便允許將共同的設置保存在任何形式可以加載的單個配置文件中。
---
load_config_file:
- file1
- file2單個文件中的yaml多個文檔。文檔啟動標記是一條包含3個破折號的行。將按順序應用多個文檔,就像給出了多個文件名一樣。
在下面的示例中,添加元素後,利用多個文檔來加載另一個配置文件。 (如果這是一個文檔,則load_config_file將在elements之前調用,無論其在文件中的位置如何)。
---
elements:
- name: one
- name: two
---
load_config_file: ext.yml如果設置了“ config_file_path”目錄,從“ config_file_path”目錄解析相對路徑,否則從當前的工作目錄中解析。
有關組織配置文件的建議,請參見“最佳實踐”。
參數:%選項
如果定義,則將參數用於創建data :: visitor ::回調對像在“ load_config_file”期間,該對象可用於在將其發送給“填充”之前預先處理配置。
例如,下面的代碼將回調添加到一個表單中,該表單將動態更改“ .yml”以“ .yaml”結尾的任何配置值在.yaml“”呼叫“ load_config_file”:
$form->config_callback({
plain_value => sub {
my( $visitor, $data ) = @_;
s/.yml/.yaml/;
}
});默認值:未定義
此方法是一種特殊的“繼承訪問者”,這意味著它可以在表單,塊元素或單個元素上設置。當讀取值時,如果未定義值,則它會自動穿越父母的元素層次結構,通過任何塊元素並直至表單,從而搜索定義的值。
參數:%選項
返回值:$表格
每個選項鍵/值傳遞的可能是任何HTML :: FormFu方法名稱和參數。
提供了一種設置多個值的簡單方法,或在單個方法呼叫的表單中添加多個元素。
嘗試以半智能順序調用方法名稱(有關詳細信息,請參見HTML::FormFu::ObjectUtil中的pupulate()源)。
參數:%默認值
返回值:$表格
從單個Hash-ref設置多個字段的默認值。
Hash-ref的鍵對應於表單字段的名稱,該值將傳遞給字段的默認方法。
在將所有字段添加到表單中,然後在“過程”之前(否則,在渲染表單之前再次調用“ process”),應調用此功能。
參數:$ Directory_name
“ config_file_path”定義了將在何處搜索配置文件,如果未給出“ load_config_file”的絕對路徑。
默認值:未定義
此方法是一種特殊的“繼承訪問者”,這意味著它可以在表單,塊元素或單個元素上設置。當讀取值時,如果未定義值,則它會自動穿越父母的元素層次結構,通過任何塊元素並直至表單,從而搜索定義的值。
是繼承的登錄器。
參數:$ field_name
參數:&coderef
如果“指示器”設置為字段名稱,則提交的“指標”將返回True,如果該字段名稱的值已提交。
如果將“指示器”設置為代碼-RF,則將其稱為帶有兩個參數$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>第三元素在新的字段集中
---
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”。
是輸出登錄器。
如果為true,則迫使“ form_error_message”即使沒有字段錯誤,也要顯示。
參數:%默認值
設置默認值將添加到給定類型的每個元素,約束等中,然後將其添加到表單中。
例如,使每個Text元素自動具有10個大小,並使每個Strftime Feflator自動將其strftime設置為%d/%m/%Y :
default_args:
elements:
Text:
size: 10
deflators:
Strftime:
strftime: '%d/%m/%Y'使所有DateTime元素自動獲得適當的Strftime Feeflator和DateTime Adverator的一個示例:
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 html :: formfu :: formfu :: prole :: element :: element :: field或html :: field或html :: formfu :: formfu :: fore :: cole :: remo :: ream :: emelt :: emelt :: emelt :: emption :: input。
每個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鍵必須匹配按type返回的值,例如html :: formfu :: element中的“類型”。例如,如果您在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”生成一個單個哈希夫來傳遞給“填充”,依次合併每種類型的參數 - 含義為“填充”,僅調用一次 - 每種類型不是一次。因為不合併標量值 - 這意味著以後的值將覆蓋較早的值:例如
# 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]
返回值:%存放
提供了一個哈希-REF,您可以在其中存儲任何可能要與表單關聯的數據。
---
stash:
foo: value
bar: value 參數:$類型
參數:%選項
返回值:$元素
參數: @arrayref_of_types_or_options
返回值:@Elements
向表單添加一個新元素。請參閱HTML :: FormFu :: element中的“核心表單”字段和html :: formfu :: element中的“其他核心元素”,以獲取核心元素列表。
如果您想從HTML::FormFu::Element:: ,可以從命名空間中加載元素,則可以通過將其在+前綴中使用完全合格的軟件包名。
---
elements:
- type: +MyApp::CustomElement
name: foo如果%options中未提供type ,則將使用默認Text 。
“元素”是“元素”的別名。
參數:$類型
參數:%選項
返回值:$ DEFLATOR
參數: @arrayref_of_types_or_options
返回值:@deflators
縮放器可以與任何表單字段關聯,並允許您提供$ field->默認值,其中可能是對象的值。
如果對像不將其串起到適當的顯示值,則縮放器可以確保表單字段取代接收合適的字符串值。
請參閱HTML :: FormFu :: Deflator中的“核心放流器”,以獲取核心縮小器列表。
如果未提供name屬性,則為表單上的每個字段創建並添加了一個新的縮寫器。
如果要在HTML::FormFu::Deflator:: ,可以將縮放器加載到命名空間中,則可以通過將其前綴 + +使用+來使用完全合格的軟件包名稱。
“ Deflator”是“縮進器”的別名。
參數:$ new_element,$ asuth_element
返回值:$ new_element
第一個參數必須是您要添加的元素,第二個參數必須是應該放置新元素的現有元素。
my $new = $form->element(%specs);
my $position = $form->get_element({ type => $type, name => $name });
$form->insert_before( $new, $position );在上面示例的第一行中,最初將$new元素添加到表單的末尾。但是, insert_before將換算$new元素,因此它將不再在表單的末尾。因此,如果您嘗試將一個元素從一種形式複製到另一種形式,它將“竊取”該元素,而不是複制它。在這種情況下,您必須使用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,$ asuth_element
返回值:$ new_element
第一個參數必須是您要添加的元素,第二個參數必須是應將新元素放置的現有元素。
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為傳統上描述為驗證提供了幾個階段。這些都是:
第一階段,過濾器允許清理用戶輸入,例如編碼或刪除領先/尾隨的空格,或從信用卡號碼中刪除非數字字符。
以下所有階段都允許更複雜的處理,並且每個階段都有一個機制可以允許異常的機制來表示輸入錯誤。在每個階段,所有表單字段都必須在下一階段進行而不會出錯。如果有任何錯誤,則應將表格重新啟動給用戶,以允許他們輸入正確的值。
限制用於低級驗證值的限制,例如“這是整數嗎?”,“這個值在範圍內嗎?”或“這是有效的電子郵件地址嗎?”。
充氣器旨在允許一個值變成適當的對象。結果對象將傳遞給後續驗證器和變形金剛,也將通過“ params”和“ param”返回。
驗證者旨在用於高級驗證,例如業務邏輯和數據庫約束,例如“該用戶名獨特嗎?”。僅當所有約束和充氣機都沒有錯誤運行時,驗證器才能運行。預計大多數驗證器將是特定於應用程序的,因此每個驗證者都將作為由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 ::充氣機中的“核心充氣器”,以獲取核心充氣機的列表。
如果沒有提供name屬性,則為表單上的每個字段創建並添加了一個新的充氣器。
如果您想將充氣機加載到HTML::FormFu::Inflator:: ,可以通過將其 + +前綴使用+來使用完全合格的軟件包名稱。
“充氣器”是“充氣機”的別名。
參數:$類型
參數:%選項
返回值:$驗證器
參數: @arrayref_of_types_or_options
返回值:@Validators
有關核心驗證器列表,請參見HTML :: FormFu ::驗證器中的“核心驗證器”。
如果未提供name屬性,則將為表單上的每個字段創建新的驗證器。
如果要在HTML::FormFu::Validator:: ,可以將驗證器加載到命名空間中,則可以通過將其在+前綴中使用完全限定的軟件包名。
“驗證器”是“驗證者”的別名。
參數:$類型
參數:%選項
返回值:$變壓器
參數: @arrayref_of_types_or_options
返回值: @transformers
有關核心變壓器列表,請參見HTML :: Formfu :: Transformer中的“核心變壓器”。
如果未提供name屬性,則為表單上的每個字段創建並添加了一個新的變壓器。
如果要在命名空間中加載變壓器,除了HTML::FormFu::Transformer:: ,您可以通過將其前綴 + +使用+來使用完全限定的軟件包名。
“變壓器”是“變壓器”的別名。
提交後重新顯示表單時的默認行為是該字段包含原始的未更改的用戶提取的值。
如果“ render_processed_value”為真,則在所有過濾器,充氣器和變壓器都運行後,字段值將是最終結果。縮水器也將以該值運行。
如果您將其設置在帶有充氣機的字段上,但是沒有等效的縮寫器,則應確保充氣機將其串起為可用的值,以免混淆 /惹惱用戶。
默認值:false
此方法是一種特殊的“繼承訪問者”,這意味著它可以在表單,塊元素或單個元素上設置。當讀取值時,如果未定義值,則它會自動穿越父母的元素層次結構,通過任何塊元素並直至表單,從而搜索定義的值。
是繼承的登錄器。
無論用戶輸入如何,都會強制限制失敗。
如果在運行時調用此表格,則在處理表單後,必須在將表單重新播放給用戶之前再次稱為html :: formfu中的“進程”。
默認值:false
此方法是一種特殊的“繼承訪問者”,這意味著可以將其設置在表單,塊元素,元素或單個約束上。當讀取值時,如果未定義值,則它會自動穿越父母的元素層次結構,通過任何塊元素並直至表單,從而搜索定義的值。
是繼承的登錄器。
如果為true,則導致“ params”,“ param”和“有效”以忽略任何名稱以下劃線_開頭的字段。
該字段仍是正常處理的,錯誤將導致“提交” _and_valid返回false。
默認值:false
所有屬性都添加到渲染表格的開始標籤中。
# Example
---
attributes:
id: form
class: fancy_form是屬性登錄器。
是屬性的捷徑。
預設值: ""
獲取或設置與表格相關的操作。默認值不是動作,這會導致大多數瀏覽器提交到當前的URI。
是屬性的捷徑。
獲取或設置表單的編碼類型。有效值是application/x-www-form-urlencoded和multipart/form-data 。
如果表單包含文件元素,則將自動設置為multipart/form-data 。
是屬性的捷徑。
默認值:“ post”
獲取或設置用於提交表格的方法。可以設置為“發布”或“獲取”。
是屬性的捷徑。
獲取或設置表單的標題屬性。
是屬性的捷徑。
在表單頂部顯示的錯誤消息的類屬性。
請參閱“ form_error_message”
參數:[ @languages]
將傳遞給本地化對象的語言列表。
默認值:['en']
參數:[$ class_name]
className用於默認本地化對象。
默認值:'html :: formfu :: i18n'
參數:[$ key, @arguments]
與Locale :: makeText中的maketext方法兼容。
爭論:$ locale
目前僅由HTML :: FormFu :: Deflator :: FormatNumber和HTML :: FormFu :: FormFu :: Felter :: FormatNumber使用。
此方法是一種特殊的“繼承訪問者”,這意味著它可以在表單,塊元素或單個元素上設置。當讀取值時,如果未定義值,則它會自動穿越父母的元素層次結構,通過任何塊元素並直至表單,從而搜索定義的值。
是繼承的登錄器。
參數:[$ query_object]
參數:%參數
提供CGI兼容的查詢對像或提交名稱/值的哈希REF。或者,查詢對象可以直接傳遞到“過程”對象。
參數:[$ query_type]
設置哪個模塊用於提供“查詢”。
Catalyst ::控制器:: HTML :: FormFu自動將其設置為Catalyst 。
有效的值是CGI , Catalyst和CGI::Simple 。
默認值:'CGI'
參數:[$ query_object]
參數:[%params]
處理提供的查詢對像或輸入值。在調用“提交表單值和錯誤”和“修改提交表單”下列出的任何方法之前,必須調用process 。
在打印表單或調用“渲染”或“ render_data”之前,還必須至少調用一個process 。
給Catalyst :: Controller :: HTML :: FormFu的用戶註釋:因為Catalyst Controller會自動為您撥打“過程”;如果您對操作方法中的表單進行任何修改,例如添加或更改元素,添加約束等;您必須在使用“提交的_and_valid”之前再次調用“進程”,即“提交表單值和錯誤”或“修改提交表單”或呈現表單下列出的任何方法。
如果已提交表格,則返回為true。有關如何計算的詳細信息,請參見“指標”。
$form->submitted && !$form->has_errors
返回值:%參數
返回所有有效輸入的哈希 - ref,沒有錯誤。
參數:$ field_name
更可靠的,推薦的版本的“ param”。保證始終返回單個值,無論是否在列表上下文中調用。如果提交了多個值,則僅返回第一個值。如果該值無效或未提交表格,則返回undef 。這使其適合在需要單個值的列表上下文中使用。
$db->update({
name => $form->param_value('name'),
address => $form->param_value('address),
}); 參數:$ field_name
無論上下文如何,都可以保證始終返回一個值的數組ref,而不管是否提交多個值。如果該值無效或未提交表單,則將返回一個空數組ref。
參數:$ field_name
無論上下文如何,保證始終返回值列表。如果該值無效或未提交表單,則將返回一個空列表。
參數:[$ field_name]
返回值:$ input_value
返回值:@valid_names
不再建議使用,因為它的行為很難預測。使用“ param_value”,“ param_array”或“ param_list”。
一種類似於CGI的方法。
如果給出了字段名稱,則在List-context返回該字段提交的任何有效值,而在標量字段中僅返回僅提交該字段的任何有效值中的第一個。
如果沒有給出參數,請返回所有有效輸入字段名稱的列表,沒有錯誤。
通過超過1個參數是致命的錯誤。
參數:[$ field_name]
返回值:@valid_names
返回值:$ bool
如果字段名稱如果給出,則如果該字段沒有錯誤,則返回true ,如果有錯誤,則返回false 。
如果沒有給出參數,請返回所有有效輸入字段名稱的列表,沒有錯誤。
參數:[$ field_name]
返回值:@names
返回值:$ bool
如果給出字段名稱,如果該字段有錯誤,如果沒有false ,則返回true 。
如果沒有給出參數,請返回帶有錯誤的所有輸入字段名稱的列表。
參數:[%選項]
參數:[%選項]
返回值:@errors
從表格中所有字段中返回一個異常對象的數組ref。
接受name , type和stage參數以縮小返回的結果。
$form->get_errors({
name => 'foo',
type => 'Regex',
stage => 'constraint'
}); 參數:[%選項]
參數:[%選項]
返回值:$錯誤
接受與“ get_errors”相同的參數,但僅返回第一個錯誤。
有關更多詳細信息和可用模型,請參見HTML :: FormFu ::模型。
參數:$ model_name
默認值:'dbic'
參數:[$ model_name]
返回值:$模型
參數:%config
參數:$ name,$ value
返回值:$值
提供的值替換了指定字段的任何當前值。此值將在隨後的“ params”和“ param”的呼叫中返回,命名字段將包含在“有效”的計算中。
從提交的表格中刪除所有錯誤。
返回值:$ string
構建表格後,在調用“渲染”之前,必須調用一次“過程”。
返回值:$ string
返回表單啟動標籤,以及“ form_error_message”和“ javaScript”的任何輸出。
返回值:$ string
返回表單結束標籤。
返回值:$ string
返回所有隱藏的表單字段。
HTML::FormFu提供了一個插件系統,該系統允許插件輕鬆添加到表單或元素中,以更改默認的行為或輸出。
有關詳細信息,請參見HTML :: FormFu ::插件。
默認情況下,FormFu呈現“ XHTML 1.0嚴格”兼容標記,並儘可能少。提供了許多鉤子來添加編程生成的CSS類名稱,以允許僅通過更改CSS生成大量的輸出樣式。
通過佈局和Multi_layout方法,可以對標記的基本自定義化。這使您可以重新排序每個字段的各個部分的位置(例如標籤,註釋,錯誤消息和輸入標籤),並插入您可能希望的任何其他任意標籤。
如果這還不夠,您可以通過告訴HTML :: FormFu使用外部渲染引擎(例如Template Toolplate或Template :: Alloy)來完全個性化標記。有關詳細信息,請參見“ Render_Method”和“ TT_Module”。
即使您將HTML :: FormFu設置為使用模板::工具包進行渲染,也可以將html :: formfu與您更喜歡用於自己的頁面佈局使用的任何其他模板系統一起使用,無論是html :: html :: template:template :: template: <TMPL_VAR form> plate <form tal:replace="form"></form> :: <!-- {form} --> 。
從HTML::FormFu v1.00開始,不再列出TT列出所需的先決條件 - 因此,如果您想使用模板文件,則需要手動安裝它。
默認值: string
可以將其設置為tt以使用外部模板文件生成表單。
要自定義標記,您需要您應用程序本地的模板文件的副本。有關更多詳細信息,請參見HTML :: Formfu :: Manual :: Manual ::食譜中的“安裝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此方法是一種特殊的“繼承訪問者”,這意味著它可以在表單,塊元素或單個元素上設置。當讀取值時,如果未定義值,則它會自動穿越父母的元素層次結構,通過任何塊元素並直至表單,從而搜索定義的值。
是繼承的登錄器。
更改用於表單的模板文件名。
默認值:“形式”
參數:[%structor_arguments]
接受傳遞給“ render_method”的論點的哈希 - 列表,該論點在內部以“ render”稱為。
在tt_args中,鑰匙RELATIVE和RECURSION被覆蓋為始終為真,因為這些是模板引擎的基本要求。
包含HTML :: FormFu的模板文件的系統目錄始終添加到INCLUDE_PATH的末尾,以便找到核心模板文件。只有出於自定義目的,您只需要自己設置此模板文件的副本即可。
此方法是一種特殊的“繼承訪問者”,這意味著它可以在表單,塊元素或單個元素上設置。當讀取值時,如果未定義值,則它會自動穿越父母的元素層次結構,通過任何塊元素並直至表單,從而搜索定義的值。
參數:[%structor_arguments]
確保將HASH-REF參數與任何“ tt_args”的現有hash-ref值合併。
默認值:模板
將“ Render_Method”設置為tt時使用的模塊。應提供與模板兼容的接口。
此方法是一種特殊的“繼承訪問者”,這意味著它可以在表單,塊元素或單個元素上設置。當讀取值時,如果未定義值,則它會自動穿越父母的元素層次結構,通過任何塊元素並直至表單,從而搜索定義的值。
通常由“渲染”隱式稱為。返回通常將通常傳遞到string或tt渲染方法的數據結構。
與“渲染”一樣,您必須在構建表單後和調用“ render_data”之前一次調用“進程”。
例如“ render_data”,但不包括任何子元素的數據。
參數:[%選項]
參數:[%選項]
返回值: @elements
返回表單中的所有字段(具體來說,在html :: formfu :: element value中具有真實“ is_field”的所有元素)。
接受name和type參數以縮小返回的結果。
$form->get_fields({
name => 'foo',
type => 'Radio',
});還接受糾正措施以搜索結果。
$form->get_elements({
name => qr/oo/,
}); 參數:[%選項]
參數:[%選項]
返回值:$元素
接受與“ get_fields”相同的參數,但僅返回找到的第一個字段。
參數:[%選項]
參數:[%選項]
返回值: @elements
返回形式中的所有頂級元素(不是遞歸)。有關遞歸版本,請參見“ get_all_elements”。
接受name和type參數以縮小返回的結果。
$form->get_elements({
name => 'foo',
type => 'Radio',
});還接受糾正措施以搜索結果。
$form->get_elements({
name => qr/oo/,
}); 參數:[%選項]
參數:[%選項]
返回值:$元素
接受與“ get_lements”相同的參數,但僅返回第一個元素。
有關遞歸版本,請參見“ get_all_element”。
參數:[%選項]
參數:[%選項]
返回值: @elements
遞歸返回形式的所有元素。
可選地接受name和type參數以縮小返回的結果。
# return all Text elements
$form->get_all_elements({
type => 'Text',
});還接受糾正措施以搜索結果。
$form->get_elements({
name => qr/oo/,
});有關非恢復版本,請參見“ get_lements”。
參數:[%選項]
參數:[%選項]
返回值:$元素
接受與“ 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',
});還接受糾正措施以搜索結果。
$form->get_elements({
name => qr/oo/,
});有關非恢復版本,請參見“ get_all_elements”。
參數:[%選項]
參數:[%選項]
返回值: @deflators
從所有字段返回所有頂級縮進器。
接受name和type參數以縮小返回的結果。
$form->get_deflators({
name => 'foo',
type => 'Strftime',
}); 參數:[%選項]
參數:[%選項]
返回值:$元素
接受與“ get_deflators”相同的參數,但僅返回第一個縮寫器。
參數:[%選項]
參數:[%選項]
返回值: @filters
從所有字段返回所有頂級過濾器。
接受name和type參數以縮小返回的結果。
$form->get_filters({
name => 'foo',
type => 'LowerCase',
}); 參數:[%選項]
參數:[%選項]
返回值:$過濾器
接受與“ get_filters”相同的參數,但僅返回第一個過濾器。
參數:[%選項]
參數:[%選項]
返回值: @constraints
從所有字段返回所有約束。
接受name和type參數以縮小返回的結果。
$form->get_constraints({
name => 'foo',
type => 'Equal',
}); 參數:[%選項]
參數:[%選項]
返回值:$約束
接受與“ get_constraints”相同的參數,但僅返回第一個約束。
參數:[%選項]
參數:[%選項]
返回值: @inflators
從所有領域返回所有充氣機。
接受name和type參數以縮小返回的結果。
$form->get_inflators({
name => 'foo',
type => 'DateTime',
}); 參數:[%選項]
參數:[%選項]
返回值:$充氣器
接受與“ get_inflators”相同的論點,但僅返回第一個充氣機。
參數:[%選項]
參數:[%選項]
返回值:@validators
從所有字段返回所有驗證器。
接受name和type參數以縮小返回的結果。
$form->get_validators({
name => 'foo',
type => 'Callback',
}); 參數:[%選項]
參數:[%選項]
返回值:$驗證器
接受與“ get_validators”相同的參數,但僅返回第一個驗證器。
參數:[%選項]
參數:[%選項]
返回值: @transformers
從所有字段返回所有變壓器。
接受name和type參數以縮小返回的結果。
$form->get_transformers({
name => 'foo',
type => 'Callback',
}); 參數:[%選項]
參數:[%選項]
返回值:$變壓器
接受與“ get_transformers”相同的參數,但僅返回第一個變壓器。
返回$form對象的深度克隆。
由於範圍的問題,複製代碼引用(例如在回調約束中)而不是克隆。
對於基本方法,例如/attributes :
參數:[%屬性]
參數:[%屬性]
返回值:$表格
作為特殊情況,如果沒有通過論點,則返回hash-ref的屬性。這允許以下習慣。
# set a value
$form->attributes->{id} = 'form';
# delete all attributes
%{ $form->attributes } = ();所有記錄為“屬性訪問者”的方法還具有以下生成的變體:
*_xml可以用作設置器,並確保其參數不會以渲染形式XML驅散。
*_loc他可以用作設置者,並通過“本地化”傳遞參數。
add_*可以用來將單詞附加到屬性上,而無需覆蓋任何已經存在的值。
# Example
$form->attributes({ class => 'fancy' });
$form->add_attributes({ class => 'pants' });
# class="fancy pants" add_*_xml ,例如add_* ,但可以確保它不會被XML驅散。
add_*_loc ,例如add_* ,但通過“本地化”傳遞參數。
del_*可用於從屬性值中刪除單詞。
# Example
$form->attributes({ class => 'fancy pants' });
$form->del_attributes({ class => 'pants' });
# class="fancy" del_*_xml ,就像del_*一樣,但可以確保它不會被XML排出。
del_*_loc ,就像del_*一樣,但通過“本地化”傳遞參數。
同樣,任何包含單詞attributes屬性方法名稱也具有為所有這些變體創建的別名,而單詞attributes則由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' });所有記錄為“屬性短切”的方法都是直接訪問單個屬性鍵/值的縮寫。
# Example
$form->id( 'login' );
$id = $form->id;
# is equivalent to:
$form->attributes({ id => 'login' });
$id = $form->attributes->{id};所有屬性短插圖也具有*_xml變體。
# Example
$form->id_xml( $xml );
# is equivalent to:
$form->attributes_xml({ id => $xml });所有屬性短插圖也具有*_loc變體。
# Example
$form->title_loc( $key );
# is equivalent to:
$form->attributes_loc({ title => $key });所有記錄為“繼承訪問者”的方法都可以在表單,塊元素或單個字段元素上設置。當讀取值時,如果未定義值,則它會自動穿越父母的元素層次結構,從而尋找定義的值。
所有繼承的登錄器還具有一個*_no_inherit變體,可以用作獲取任何定義值的Getter,而無需穿越父母的層次結構。該變體不能用作設置器。
例如,“ auto_id”具有名為auto_id_no_inherit的變體。
所有記錄為“輸出訪問者”的方法還具有*_xml和*_loc變體。
*_xml變體可以用作二傳劑,並確保其參數不要以渲染形式xml-escctept。
*_loc變體可以用作設置器,並通過“本地化”傳遞參數。
例如,標籤方法具有名為label_xml和label_loc變體。
支持布爾屬性,其值應等於屬性名稱或空名稱。任何真實值都將切換“ ON”屬性,任何錯誤值都將刪除屬性。
# Example
$field->autofocus(1);
# equivalent to:
$field->attributes({ autofocus => 'autofocus' });
$field->autofocus(0);;
# equivalent to:
delete $field->attributes->{autofocus};一些屬性支持字符替代:可以實現以下替換:
%f # $form->id
%n # $field->name
%t # lc( $field->type )
%r # $block->repeatable_count
%s # $error->stage這些允許每個字段具有一致的屬性,同時保持唯一。
我們會盡力不進行不兼容的更改,但是如果需要,我們將盡一切可能為幾個發行循環提供向後兼容,並在刪除遺產功能之前發出有關更改的警告。
v1.00丟棄了大多數默認的HTML類名稱,目的是每個應用程序都應定義其所需的內容,而無需首先重置不需要的選項。我們還獲得了較少產生的標記,加快渲染和HTTP轉移的好處。
要恢復先前的行為,請設置以下選項。
如果您使用的是最佳實踐,則只需要在應用程序範圍的配置文件中設置這些一次每次應用即可。
---
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'請參閱html :: formfu ::角色:: element :: field中的“棄用方法”。
另請參見HTML :: FormFu :: element中的“刪除方法”。
已被刪除;請參閱“ Default_args”。
已被刪除;而是使用“ default_model”。
已被刪除;使用html :: formfu ::模型中的“ default_values”。
已被刪除;使用HTML :: FormFu ::模型中的“ Update”。
建議將整個應用程序(或全局)設置保持在單個配置文件中,該設置應由每種表單加載。
請參閱“ load_config_file”。
html :: formfu ::手冊::食譜
html :: formfu ::手冊:: unicode
分發目錄examples/vertically-aligned包含一個示例CSS的形式,該示例的“垂直對齊”主題。
可以通過在Web瀏覽器中打開vertically-aligned.html文件來查看這一點。
如果您想嘗試進行更改,則表格將在文件vertically-aligned.yml文件中定義,並且可以通過運行以下命令(而在Distribution root Directory中)更新HTML文件。
perl examples/vertically-aligned/vertically-aligned.pl這使用了模板工具包vertically-aligned.css vertically-aligned.tt tt,並且CSS在vertically-aligned-ie.css文件中定義。
html :: FormFu :: Imager
catalyst ::控制器:: html :: formfu
html :: Formfu :: Model :: DBIC
布萊恩·卡西迪(Brian Cassidy)
Ozum Eldogan
魯本·豐塞卡(Ruben Fonseca)
羅納德·金博爾(Ronald Kimball)
麥加大道
Andreas Marienborg
馬里奧·米納蒂(Mario Minati)
史蒂夫·諾爾特
莫里茨·奧肯(Moritz Onken)
道格·奧爾良
Matthias Dietrich
Dean Hamstead
卡倫·埃瑟里奇(Karen Etheridge)
奈傑爾·梅瑟靈漢
根據sebastian riedel的原始源代碼, [email protected] oook.de。
卡爾·弗蘭克斯(Carl Franks)<[email protected]>
該軟件是Carl Franks的版權(C)2018。
這是免費軟件;您可以將其重新分配和/或以與Perl 5編程語言系統本身相同的條款進行修改。