matthewbaggett/drupal_magic_forms

因为 Drupal 表单真的很糟糕。

dev-master 2016-02-06 21:17 UTC

This package is auto-updated.

Last update: 2024-09-24 06:17:23 UTC


README

对 Drupal 7 的表单处理的一种稍微不那么令人讨厌的实现。

因为我们都知道 Drupal 表单真的很糟糕。

支持多种表单字段类型

  • 按钮
  • 文件
  • 隐藏
  • 输入
  • 单选按钮
  • 选择
  • 文本区域
  • 日期
  • 范围(感谢 Jason!)
  • 多选单选按钮
  • 开关(又是 Jason)

附加功能

  • 数据表。
  • 标签

验证器

带有验证器的示例

$form = new magic_form('my-form');
$form
  ->add_field(
    magic_form_field_text::factory('some-field', 'Some Field', 'Some Default')
      ->add_validator(new magic_form_validator_is_valid_phonenumber())
      ->add_validator(new magic_form_validator_is_valid_email())
  )->add_field(
    magic_form_field_text::factory('other-field')
      ->add_validator(new magic_form_validator_is_less_than(100))
      ->add_validator(new magic_form_validator_is_greater_than(50))
  )->add_field(
    magic_form_field_text::factory('other-field')
      ->add_validators(
        new magic_form_validator_is_less_than(100),
        new magic_form_validator_is_greater_than(50),
        new magic_form_validator_regexp('REGEXP_GOES_HERE')
      )
  )->add_fields(
    magic_form_field_text::factory('some-field', 'Some Field', 'Some Default')
      ->add_validator(new magic_form_validator_is_valid_phonenumber())
      ->add_validator(new magic_form_validator_is_valid_email()),
    magic_form_field_text::factory('some-field', 'Some Field', 'Some Default')
      ->add_validator(new magic_form_validator_is_valid_phonenumber())
      ->add_validator(new magic_form_validator_is_valid_email()),
    magic_form_field_text::factory('some-field', 'Some Field', 'Some Default')
      ->add_validator(new magic_form_validator_is_valid_phonenumber())
      ->add_validator(new magic_form_validator_is_valid_email()),
    magic_form_field_text::factory('some-field', 'Some Field', 'Some Default')
      ->add_validator(new magic_form_validator_is_valid_phonenumber())
      ->add_validator(new magic_form_validator_is_valid_email())
  );

  $form->submit(function (magic_form $form) {
      drupal_set_message("Submit happened in form {$form->magic_form_id} / {$form->form_id}");
  });

  // Check to see if an earlier, updated build of this form exists.
  magic_form::check_for_updated_form($form);

  // render the form.
  return $form->__toString();