ملاحظة: تستخدم هذه الأمثلة 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 );
}إذا كنت تستخدم CATALYST ، فقد يكون مثال أكثر ملاءمة هو:
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;
}ملاحظة: لأن "العملية" تسمى تلقائيًا لك من قبل وحدة تحكم المحفز ؛ إذا قمت بإجراء أي تعديلات على النموذج داخل طريقة الإجراء الخاصة بك ، مثل إضافة العناصر أو تغييرها ، إضافة القيود ، إلخ ؛ يجب عليك استدعاء "عملية" مرة أخرى بنفسك قبل استخدام "submitted_and_valid" ، أو أي من الأساليب المدرجة ضمن "قيم وأخطاء النماذج المقدمة" أو "تعديل نموذج مقدم" ، أو تقديم النموذج.
فيما يلي مثال على ملف التكوين لإنشاء نموذج تسجيل دخول أساسي (جميع الأمثلة هنا هي YAML ، ولكن يمكنك استخدام أي تنسيق مدعوم من Config: IN) ، يمكنك أيضًا إنشاء نماذج مباشرة في رمز 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 يهدف إلى أن يكون سهلاً قدر الإمكان لاستخدامه في نماذج الويب الأساسية ، ولكن مع القوة والمرونة لفعل أي شيء آخر قد ترغب في القيام به (طالما أنه يتضمن أشكالًا).
يمكنك تكوين أي جزء تقريبًا من سلوك Formfu وإخراجه. بشكل افتراضي ، يجعل Formfu "XHTML 1.0 الصارم" ، مع القليل من العلامات الإضافية ، ولكن مع أسماء فئة CSS كافية للسماح بتوليد مجموعة واسعة من أنماط الإخراج عن طريق تغيير CSS فقط.
يمكن استدعاء جميع الطرق المذكورة أدناه (باستثناء "جديد") كطريقة عادية على كائن $form الخاص بك ، أو كخيار في ملف التكوين الخاص بك. سيتم عرض الأمثلة بشكل أساسي في بناء جملة Yaml Config.
تتبع هذه الوثائق الاتفاقية التي تفيد بأن الوسائط المحاطة بأقواس مربعة [] اختيارية ، وجميع الوسائط الأخرى مطلوبة.
الحجج: [ ٪ خيارات]
قيمة الإرجاع: نموذج $
إنشاء كائن HTML :: Formfu جديد.
أي طريقة يمكن استدعاؤها على كائن html :: formfu يمكن تمريرها بدلاً من ذلك كوسيطة إلى "جديد".
my $form = HTML::FormFu->new({
action => '/search',
method => 'GET',
auto_fieldset => 1,
}); الحجج: اسم الملف $
الحجج: filenames
قيمة الإرجاع: نموذج $
يقبل اسم ملف أو قائمة بأسماء الملفات ، التي يجب أن تكون نماذج Filets من أي تنسيق معترف به بواسطة Config :: أي.
يتم تمرير محتوى كل ملف تكوين إلى "Populate" ، وبالتالي يتم إضافته إلى النموذج.
يمكن استدعاء "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" والتي يمكن استخدامها لعملية التكوين المسبقة قبل إرسالها إلى "populate".
على سبيل المثال ، يضيف الرمز أدناه رد اتصال إلى نموذج يغير بشكل ديناميكي أي قيمة تكوين تنتهي في ".YML" لإنهاء ".yaml" عند الاتصال "load_config_file":
$form->config_callback({
plain_value => sub {
my( $visitor, $data ) = @_;
s/.yml/.yaml/;
}
});القيمة الافتراضية: غير محدد
هذه الطريقة هي "ملحق ورث" خاص ، مما يعني أنه يمكن تعيينه على النموذج أو عنصر كتلة أو عنصر واحد. عند قراءة القيمة ، إذا لم يتم تعريف أي قيمة ، فإنها تعبر التسلسل الهرمي للعنصر تلقائيًا للآباء والأمهات ، من خلال أي عناصر كتلة وحتى النموذج ، والبحث عن قيمة محددة.
الحجج: ٪ خيارات
قيمة الإرجاع: نموذج $
قد يكون كل مفتاح/قيمة خيار تم تمريره هو أي اسم والوسائط HTML :: Formfu.
يوفر طريقة بسيطة لتعيين قيم متعددة ، أو إضافة عناصر متعددة إلى نموذج مع طريقة واحدة.
محاولات استدعاء الأسماء في ترتيب شبه ذكي (انظر مصدر populate () في HTML::FormFu::ObjectUtil للحصول على التفاصيل).
الحجج: ٪ الافتراضيات
قيمة الإرجاع: نموذج $
قم بتعيين القيم الافتراضية للحقل المتعدد من علامة تجزئة واحدة.
تتوافق مفاتيح HEH-REF مع اسم حقل النماذج ، ويتم تمرير القيمة إلى الطريقة الافتراضية للحقل.
يجب أن يتم استدعاء ذلك بعد إضافة جميع الحقول إلى النموذج ، وقبل أن يتم استدعاء "العملية" (خلاف ذلك ، استدعاء "عملية" مرة أخرى قبل تقديم النموذج).
الحجج: $ directory_name
يحدد "config_file_path" مكان البحث عن ملفات التكوين ، إذا لم يتم إعطاء مسار مطلق إلى "load_config_file".
القيمة الافتراضية: غير محدد
هذه الطريقة هي "ملحق ورث" خاص ، مما يعني أنه يمكن تعيينه على النموذج أو عنصر كتلة أو عنصر واحد. عند قراءة القيمة ، إذا لم يتم تعريف أي قيمة ، فإنها تعبر التسلسل الهرمي للعنصر تلقائيًا للآباء والأمهات ، من خلال أي عناصر كتلة وحتى النموذج ، والبحث عن قيمة محددة.
هو ملحق ورث.
الوسائط: $ field_name
الحجج: & coderef
إذا تم تعيين "المؤشر" على اسم FieldName ، فسيتم إرجاع "تقديم" صحيحًا إذا تم تقديم قيمة لهذا اسم الحقل.
إذا تم تعيين "المؤشر" على كود-ريف ، فسيتم تسميته كطوائح فرعية مع $form $query ، وسيتم استخدام قيمة الإرجاع الخاصة به كقيمة الإرجاع لـ "المقدمة".
إذا لم يتم تعيين "المؤشر" ، فسيتم إرجاع "المقدمة" بشكل صحيح إذا تم تقديم قيمة لأي اسم حقل معروف.
الحجج: 1
الحجج: ٪ خيارات
قيمة الإرجاع: $ fieldset
هذا الإعداد مناسب لمعظم النماذج الأساسية ، ويعني أنه يمكنك تجاهل بشكل عام إضافة Fieldsets بنفسك.
استدعاء $form->auto_fieldset(1) يضيف على الفور عنصر Fieldset إلى النموذج. بعد ذلك ، ستضيف $form->elements() جميع العناصر (باستثناء الحقول) إلى تلك الحقول ، بدلاً من النموذج مباشرة.
لكي تكون محددًا ، تتم إضافة العناصر إلى الحقول الأخيرة على النموذج ، لذلك إذا قمت بإضافة حقول أخرى ، فسيتم إضافة أي عناصر أخرى إلى تلك الحقول.
أيضًا ، يمكنك تمرير HashRef إلى Auto_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>2 عناصر مع "Auto_fieldset".
---
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".
هو ملحق الإخراج.
إذا كان هذا صحيحًا ، فإن "form_error_message" ليتم عرضه حتى لو لم تكن هناك أخطاء حقل.
الحجج: ٪ الافتراضيات
قم بتعيين الإعدادات الافتراضية التي سيتم إضافتها إلى كل عنصر ، أو قيد ، وما إلى ذلك من النوع المحدد الذي يتم إضافته لاحقًا إلى النموذج.
على سبيل المثال ، لجعل كل عنصر من عناصر Text تلقائيًا يبلغ حجم 10 ، وجعل كل عيبات Strftime تلقائيًا يصل إلى %d/%m/%Y :
default_args:
elements:
Text:
size: 10
deflators:
Strftime:
strftime: '%d/%m/%Y'مثال على جعل جميع عناصر DateTime تلقائيًا تحصل على معاملة صاخبة مناسبة وتنفيس في وقت البيانات:
default_args:
elements:
DateTime:
deflators:
type: Strftime
strftime: '%d-%m-%Y'
inflators:
type: DateTime
parser:
strptime: '%d-%m-%Y' كحالة خاصة ، يمكنك أيضًا استخدام Block مفاتيح elements ، Field Input لمطابقة أي عنصر يرث من html :: formfu :: element :: block أو does html :: formfu :: element :: field أو html :: formfu :: element :: element.
يمكن أن يحتوي كل مفتاح 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::* ، الذي تقوم بتحميله عبر $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" يولد هاشف واحد لتمريره إلى "populate" ، ودمج الوسائط لكل نوع بدوره - بمعنى "populate" لا يسمى إلا مرة واحدة في المجموع - ليس مرة واحدة لكل نوع. نظرًا لعدم دمج القيم العددية - هذا يعني أن القيم اللاحقة ستتجاوز القيم السابقة: على سبيل المثال
# 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
يضيف علامة script لكل عنوان URL ، مباشرة قبل أي قسم "JavaScript".
الحجج: [ ٪ private_stash]
قيمة الإرجاع: ٪ خبأ
يوفر علامة التجزئة التي يمكنك من خلالها تخزين أي بيانات قد ترغب في ربطها بالنموذج.
---
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 إذا لم يتم توفير type في %options ، فسيتم استخدام Text الافتراضي.
"العنصر" هو الاسم المستعار ل "العناصر".
الحجج: نوع $
الحجج: ٪ خيارات
قيمة الإرجاع: $ deflator
الوسائط: @arrayref_of_types_or_options
قيمة الإرجاع: deflators
قد يرتبط المعلن بأي حقل نموذج ، ويسمح لك بتوفير $ حقل> افتراضي بقيمة قد تكون كائنًا.
إذا لم يكن كائن ما يترسل إلى قيمة مناسبة للعرض ، فيمكن أن يضمن حقل النموذج قيمة سلسلة مناسبة بدلاً من ذلك.
انظر "deflators الأساسية" في html :: formfu :: deflator للحصول على قائمة من deflators الأساسية.
إذا لم يتم توفير سمة name ، يتم إنشاء عيب جديد وإضافته إلى كل حقل في النموذج.
إذا كنت ترغب في تحميل معاملة deflator في مساحة اسم غير HTML::FormFu::Deflator:: ، يمكنك استخدام اسم حزمة مؤهل بالكامل عن طريق البادئة مع + .
"Deflator" هو الاسم المستعار لـ "deflators".
الوسيطات: $ new_element ، $ nreaft_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 ، $ nreaft_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:: ، يمكنك استخدام اسم حزمة مؤهل بالكامل عن طريق البادئة مع + .
"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
انظر "Core Validators" في HTML :: Formfu :: Deadator للحصول على قائمة المدققين الأساسية.
إذا لم يتم توفير سمة name ، يتم إنشاء مدقق جديد وإضافته إلى كل حقل في النموذج.
إذا كنت ترغب في تحميل مدقق في مساحة اسم غير HTML::FormFu::Validator:: ، يمكنك استخدام اسم حزمة مؤهل بالكامل عن طريق البادئة مع + .
"المدقق" هو الاسم المستعار ل "المدققين".
الحجج: نوع $
الحجج: ٪ خيارات
قيمة الإرجاع: $ transformer
الوسائط: @arrayref_of_types_or_options
قيمة الإرجاع: @ransformers
انظر "المحولات الأساسية" في HTML :: Formfu :: Transformer للحصول على قائمة المحولات الأساسية.
إذا لم يتم توفير سمة name ، يتم إنشاء محول جديد وإضافته إلى كل حقل في النموذج.
إذا كنت ترغب في تحميل محول في مساحة اسم غير HTML::FormFu::Transformer:: ، يمكنك استخدام اسم حزمة مؤهل بالكامل عن طريق البادئة مع + .
"المحول" هو الاسم المستعار لـ "Transformers".
السلوك الافتراضي عند إعادة تشغيل نموذج بعد التقديم ، هو أن الحقل يحتوي على القيمة الأصلية التي تقدمها المستخدم.
إذا كانت "Render_procounted_value" صحيحة ، فستكون قيمة الحقل هي النتيجة النهائية بعد تشغيل جميع المرشحات والفخاخات والمحولات. سيتم تشغيل deflators أيضًا على القيمة.
إذا قمت بتعيين هذا على حقل مع نفخ ، ولكن بدون معادلة مكافئة ، فيجب عليك التأكد من أن الضوضاء تترسل إلى قيمة قابلة للاستخدام ، حتى لا تخلط / إزعاج المستخدم.
القيمة الافتراضية: خطأ
هذه الطريقة هي "ملحق ورث" خاص ، مما يعني أنه يمكن تعيينه على النموذج أو عنصر كتلة أو عنصر واحد. عند قراءة القيمة ، إذا لم يتم تعريف أي قيمة ، فإنها تعبر التسلسل الهرمي للعنصر تلقائيًا للآباء والأمهات ، من خلال أي عناصر كتلة وحتى النموذج ، والبحث عن قيمة محددة.
هو ملحق ورث.
فرض قيود على الفشل ، بغض النظر عن مدخلات المستخدم.
إذا تم استدعاء هذا في وقت التشغيل ، بعد معالجة النموذج بالفعل ، يجب أن تسمى "العملية" في html :: formfu مرة أخرى قبل إعادة تشغيل النموذج إلى المستخدم.
القيمة الافتراضية: خطأ
هذه الطريقة هي "ملحق ورث" خاص ، مما يعني أنه يمكن تعيينه على النموذج أو عنصر كتلة أو عنصر أو قيد واحد. عند قراءة القيمة ، إذا لم يتم تعريف أي قيمة ، فإنها تعبر التسلسل الهرمي للعنصر تلقائيًا للآباء والأمهات ، من خلال أي عناصر كتلة وحتى النموذج ، والبحث عن قيمة محددة.
هو ملحق ورث.
إذا كان هذا صحيحًا ، فإن الأسباب "params" و "param" و "apport" لتجاهل أي حقول يبدأ اسمها بأحرف سطحية _ .
لا يزال الحقل معالجًا كالمعتاد ، وستتسبب الأخطاء في "إرسالها _and_valid" للعودة الخاطئة.
القيمة الافتراضية: خطأ
تتم إضافة جميع السمات إلى علامة بدء النموذج المقدم.
# Example
---
attributes:
id: form
class: fancy_formهو ملحق السمة.
هو سمة اختصار.
القيمة الافتراضية: ""
الحصول على أو تعيين الإجراء المرتبط بالنموذج. الافتراضي هو عدم وجود إجراء ، مما يؤدي إلى إرسال معظم المتصفحات إلى URI الحالي.
هو سمة اختصار.
الحصول على أو تعيين نوع الترميز للنموذج. القيم الصالحة هي application/x-www-form-urlencoded و multipart/form-data .
إذا كان النموذج يحتوي على عنصر ملف ، فسيتم تعيين enctype تلقائيًا على multipart/form-data .
هو سمة اختصار.
القيمة الافتراضية: "post"
الحصول على أو تعيين الطريقة المستخدمة لتقديم النموذج. يمكن ضبطها على "post" أو "GET".
هو سمة اختصار.
الحصول على أو تعيين سمة عنوان النموذج.
هو سمة اختصار.
سمة الفئة لرسالة الخطأ المعروضة في الجزء العلوي من النموذج.
انظر "form_error_message"
الحجج: [@languages]
قائمة اللغات التي سيتم نقلها إلى كائن التوطين.
القيمة الافتراضية: ['en']
الوسيطات: [$ class_name]
ClassName لاستخدامه في كائن التوطين الافتراضي.
القيمة الافتراضية: 'html :: formfu :: i18n'
الوسيطات: [$ KEY ، ARGUMSES]
متوافق مع طريقة maketext في locale :: maketext.
الحجج: $ locale
حاليًا تستخدم فقط بواسطة HTML :: formfu :: deflator :: formatnumber و html :: formfu :: filter :: formatnumber.
هذه الطريقة هي "ملحق ورث" خاص ، مما يعني أنه يمكن تعيينه على النموذج أو عنصر كتلة أو عنصر واحد. عند قراءة القيمة ، إذا لم يتم تعريف أي قيمة ، فإنها تعبر التسلسل الهرمي للعنصر تلقائيًا للآباء والأمهات ، من خلال أي عناصر كتلة وحتى النموذج ، والبحث عن قيمة محددة.
هو ملحق ورث.
الوسائط: [$ query_object]
الحجج: ٪ params
توفير كائن استعلام متوافق مع CGI أو تجزئة الأسماء/القيم المقدمة. بدلاً من ذلك ، يمكن تمرير كائن الاستعلام مباشرة إلى كائن "العملية".
الوسائط: [$ query_type]
SET التي يتم استخدام الوحدة النمطية لتوفير "الاستعلام".
The Catalyst :: Controller :: html :: formfu يقوم تلقائيًا بتعيين هذا على Catalyst .
القيم الصالحة هي CGI و Catalyst و CGI::Simple .
القيمة الافتراضية: "CGI"
الوسائط: [$ query_object]
الحجج: [ ٪ params]
معالجة كائن الاستعلام المقدم أو قيم الإدخال. يجب استدعاء process قبل استدعاء أي من الأساليب المدرجة تحت "قيم وأخطاء النماذج المقدمة" و "تعديل نموذج مقدم".
يجب أيضًا استدعاء process مرة واحدة على الأقل قبل طباعة النموذج أو استدعاء "العرض" أو "Render_Data".
ملاحظة لمستخدمي Catalyst :: Controller :: html :: formfu: لأن "العملية" تسمى تلقائيًا لك من قبل وحدة تحكم Catalyst ؛ إذا قمت بإجراء أي تعديلات على النموذج داخل طريقة الإجراء الخاصة بك ، مثل إضافة العناصر أو تغييرها ، إضافة القيود ، إلخ ؛ يجب عليك استدعاء "عملية" مرة أخرى بنفسك قبل استخدام "submitted_and_valid" ، أو أي من الأساليب المدرجة ضمن "قيم وأخطاء النماذج المقدمة" أو "تعديل نموذج مقدم" ، أو تقديم النموذج.
إرجاع صحيح إذا تم تقديم النموذج. انظر "المؤشر" للحصول على تفاصيل حول كيفية حساب ذلك.
اختصار لـ $form->submitted && !$form->has_errors
قيمة الإرجاع: ٪ 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's.
إذا تم إعطاء اسم الحقل ، في قائمة سياق القائمة ، يقوم بإرجاع أي قيم صالحة المقدمة لهذا الحقل ، وفي السياق العددي ، يعيد فقط أول أي قيم صالحة مقدمة لهذا الحقل.
إذا لم يتم إعطاء وسيطة ، فإن إرجاع قائمة بجميع أسماء حقل الإدخال الصالحة دون أخطاء.
تمرير أكثر من حجة واحدة هو خطأ فادح.
الوسيطات: [$ field_name]
قيمة الإرجاع: valid_names
قيمة الإرجاع: $ bool
إذا كان اسم حقل إذا تم إعطاؤه ، فسيتم true إذا لم يكن لهذا الحقل أخطاء false إذا كانت هناك أخطاء.
إذا لم يتم إعطاء وسيطة ، فإن إرجاع قائمة بجميع أسماء حقل الإدخال الصالحة دون أخطاء.
الوسيطات: [$ field_name]
قيمة الإرجاع: @names
قيمة الإرجاع: $ bool
إذا كان اسم حقل إذا تم إعطاؤه ، فاحرص على true إذا كان لهذا الحقل أخطاء false إذا لم تكن هناك أخطاء.
إذا لم يتم إعطاء وسيطة ، فإن إرجاع قائمة بجميع أسماء حقل الإدخال مع الأخطاء.
الحجج: [٪ خيارات]
الحجج: [ ٪ خيارات]
قيمة الإرجاع: errors
إرجاع مجموعة من كائنات الاستثناء من جميع الحقول في النموذج.
يقبل كل من name ، type stage لتضييق النتائج التي تم إرجاعها.
$form->get_errors({
name => 'foo',
type => 'Regex',
stage => 'constraint'
}); الحجج: [٪ خيارات]
الحجج: [ ٪ خيارات]
قيمة الإرجاع: خطأ $
يقبل نفس الوسائط مثل "get_errors" ، ولكن فقط يعيد الخطأ الأول الموجود.
انظر HTML :: Formfu :: Model لمزيد من التفاصيل والموديلات المتاحة.
الوسائط: $ model_name
القيمة الافتراضية: "DBIC"
الوسائط: [$ model_name]
قيمة الإرجاع: نموذج $
الوسائط: ٪ config
الحجج: اسم $ ، قيمة $
قيمة الإرجاع: قيمة $
تستبدل القيمة المقدمة أي قيمة حالية للحقل المسماة. سيتم إرجاع هذه القيمة في المكالمات اللاحقة إلى "params" و "param" وسيتم تضمين الحقل المسماة في حسابات "صالحة".
يحذف جميع الأخطاء من نموذج مقدم.
قيمة الإرجاع: $ string
يجب عليك استدعاء "عملية" مرة واحدة بعد إنشاء النموذج ، وقبل الاتصال "Render".
قيمة الإرجاع: $ string
إرجاع علامة بدء النموذج ، وأي إخراج من "form_error_message" و "JavaScript".
قيمة الإرجاع: $ string
إرجاع علامة نهاية النموذج.
قيمة الإرجاع: $ string
إرجاع جميع حقول النماذج المخفية.
يوفر HTML::FormFu نظامًا إضافيًا يسمح بإضافة المكونات الإضافية بسهولة إلى نموذج أو عنصر ، لتغيير السلوك أو الإخراج الافتراضي.
انظر HTML :: Formfu :: Plugin للحصول على التفاصيل.
بشكل افتراضي ، يقوم Formfu بإحضار "XHTML 1.0 الصارم" المتوافق "، مع أقل قدر ممكن من العلامات الإضافية. يتم توفير العديد من السنانير لإضافة أسماء فئة CSS التي تم إنشاؤها برمجياً ، للسماح بتوليد مجموعة واسعة من أنماط الإخراج عن طريق تغيير CSS فقط.
التخصيص الأساسي للتمييز ممكن من خلال طرق التصميم و multi_layout. يتيح لك ذلك إعادة ترتيب موضع أجزاء مختلفة من كل حقل - مثل التسمية والتعليق ورسائل الخطأ وعلامة الإدخال - بالإضافة إلى إدخال أي علامات تعسفية أخرى قد ترغب فيها.
إذا لم يكن ذلك كافيًا ، فيمكنك إجراء تخصيص العلامات بالكامل من خلال إخبار HTML :: FormFu باستخدام محرك عرض خارجي ، مثل مجموعة أدوات القالب أو القالب :: سبيك. انظر "Render_method" و "TT_Module" للحصول على التفاصيل.
حتى إذا قمت بتعيين html :: formfu لاستخدام template :: مجموعة الأدوات لتقديمها ، لا يزال من الممكن استخدام النماذج ، html :: formfu بالاقتران مع أي نظام آخر ، تفضل استخدامه لتخطيطات الصفحات الخاصة بك <form tal:replace="form"></form> أو ما إذا كان <!-- {form} --> <TMPL_VAR form> <!-- {form} --> .
اعتبارًا من HTML::FormFu v1.00 ، لم يعد TT مدرجًا في متطلب أساسي مطلوب - لذلك ستحتاج إلى تثبيته يدويًا إذا كنت ترغب في استخدام ملفات القالب.
القيمة الافتراضية: string
يمكن ضبطها على tt لإنشاء النموذج مع ملفات القالب الخارجي.
لتخصيص الترميز ، ستحتاج إلى نسخة من ملفات القالب ، المحلية في التطبيق الخاص بك. راجع "تثبيت قوالب TT" في HTML :: Formfu :: Manual :: كتاب طبخ لمزيد من التفاصيل.
يمكنك تخصيص الترميز لعنصر واحد عن طريق تعيين "Render_Method" لهذا tt ، بينما يستخدم بقية النموذج طريقة عرض string الافتراضية. لاحظ أنه إذا حاولت إعداد النموذج أو "Render_method" للكتلة إلى tt ، ثم قم بتعيين عنصر "Render_method" لعنصر الطفل على string ، فسيتم تجاهل هذا الإعداد ، وسيظل العناصر الفرعية تستخدم طريقة عرض tt .
---
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" ، والتي تسمى داخليًا "Render".
ضمن TT_ARGs ، يتم تجاوز RECURSION RELATIVE صحيحة دائمًا ، لأن هذه هي شرط أساسي لمحرك القالب.
تتم إضافة دليل قالب النظام الذي يحتوي على HTML :: Formfu دائمًا إلى نهاية INCLUDE_PATH ، بحيث يتم العثور على ملفات القالب الأساسية. تحتاج فقط إلى تعيين هذا بنفسك إذا كان لديك نسختك الخاصة من ملفات القالب لأغراض التخصيص.
هذه الطريقة هي "ملحق ورث" خاص ، مما يعني أنه يمكن تعيينه على النموذج أو عنصر كتلة أو عنصر واحد. عند قراءة القيمة ، إذا لم يتم تعريف أي قيمة ، فإنها تعبر التسلسل الهرمي للعنصر تلقائيًا للآباء والأمهات ، من خلال أي عناصر كتلة وحتى النموذج ، والبحث عن قيمة محددة.
وسيطات: [ ٪ constructor_arguments]
يضمن دمج وسيطة Hash-Ref مع أي قيمة HASH-REF موجودة لـ "TT_ARGS".
القيمة الافتراضية: قالب
يتم تعيين الوحدة المستخدمة عند ضبط "Render_method" على tt . يجب توفير واجهة متوافقة مع القالب.
هذه الطريقة هي "ملحق ورث" خاص ، مما يعني أنه يمكن تعيينه على النموذج أو عنصر كتلة أو عنصر واحد. عند قراءة القيمة ، إذا لم يتم تعريف أي قيمة ، فإنها تعبر التسلسل الهرمي للعنصر تلقائيًا للآباء والأمهات ، من خلال أي عناصر كتلة وحتى النموذج ، والبحث عن قيمة محددة.
عادة ما يسمى ضمنيا من قبل "التجسيد". إرجاع بنية البيانات التي عادة ما يتم تمريرها على string أو tt .
كما هو الحال مع "العرض" ، يجب عليك الاتصال "بعملية" مرة واحدة بعد إنشاء النموذج ، وقبل الاتصال "Render_data".
مثل "Render_data" ، ولكن لا يتضمن بيانات أي عناصر أطفال.
الحجج: [٪ خيارات]
الحجج: [ ٪ خيارات]
قيمة الإرجاع: elements
إرجاع جميع الحقول في النموذج (على وجه التحديد ، جميع العناصر التي لها "is_field" حقيقية في HTML :: Formfu :: Element Value).
يقبل كل من 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" ، ولكنه لا يعيد سوى المعلوم الأول الموجود.
الحجج: [٪ خيارات]
الحجج: [ ٪ خيارات]
قيمة الإرجاع: 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.