pandora-una/pandora-valida-dependencia

此包的最新版本(1.3.2)没有提供许可证信息。

检查表单其他字段的验证器

1.3.2 2018-02-20 17:20 UTC

This package is auto-updated.

Last update: 2024-09-20 03:34:46 UTC


README

用于创建依赖于其他字段字段的规则的验证器

安装

推荐安装方式是通过 composer

    {
        "require": {
            "pandora-una/pandora-valida-dependencia": "1.3.*"
        }
    }

还需要在您的 application.config.php 中添加 PandoraValidaDependencia 模块

    $modules = array(
        'DoctrineModule',
        'DoctrineORMModule',
        'PandoraValidaDependencia',
        'Application', // o application fica por ultimo pq ele pode sobrescrever as configurações dos demais
    );

使用方法

依赖验证器为表单字段创建条件规则。它在 options 中有 4 个必填参数。

  • se_campo: 将要验证的当前字段要检查的字段
  • tem_valor: 检查字段必须具有的值,以便应用某些规则,如果规则应用有两个不同的值,则此字段接受一个数组
  • este_campo: 如果检查字段具有预期值,则将对要验证的字段应用的规则
  • entidade: 正在验证的 doctrine 实体的名称

一个使用示例可能是

    $this->add(array(
        'name' => 'tem_filho',
        'required' => true,
    ));
    $this->add(array(
        'name' => 'filho',
        'required' => false,
        'continue_if_empty' => true,
        'filters' => array(),
        'validators' => array(
            array(
                'name' => 'Dependencia',
                'options' => array(
                    'se_campo' => 'tem_filho',
                    'tem_valor' => true,
                    'este_campo' => Dependencia::EH_OBRIGATORIO,
                    'entidade' => 'Application\Entity\Pessoa',
                ),
            ),
        ),
    ));

在这种情况下,如果 "tem_filho" 字段的值为 true,则 "filho" 字段是必需的。

一个适用于同一字段两个值的规则的示例可能是

    $this->add(array(
        'name' => 'status',
        'required' => true,
    ));
    $this->add(array(
        'name' => 'justificativa',
        'required' => false,
        'continue_if_empty' => true,
        'filters' => array(),
        'validators' => array(
            array(
                'name' => 'Dependencia',
                'options' => array(
                    'se_campo' => 'status',
                    'tem_valor' => array('aprovada', 'nao_aprovada'),
                    'este_campo' => Dependencia::EH_OBRIGATORIO,
                    'entidade' => 'Application\Entity\Despesa',
                ),
            ),
        ),
    ));

规则

验证器目前有 4 个可能的规则

  • Dependencia::EH_OBRIGATORIO: 正在验证的字段值必须不为 null
  • Dependencia::DEVE_SER_NULL: 正在验证的字段值必须等于 null
  • Dependencia::EH_OPCIONAL: 接受任何值
  • Dependencia::NAO_EH_EDITAVEL: 正在验证的字段值必须等于数据库中记录的值。

Dependencia::NAO_EH_EDITAVEL 规则仅在验证实体的主键在表单中时才有效。此外,还需要在选项中传递字段名称,如下例所示

    $this->add(array(
        'name' => 'id',
        'required' => true,
    ));
    $this->add(array(
        'name' => 'status',
        'required' => true,
    ));
    $this->add(array(
        'name' => 'valor',
        'required' => true,
        'filters' => array(),
        'validators' => array(
            array(
                'name' => 'Dependencia',
                'options' => array(
                    'se_campo' => 'status',
                    'tem_valor' => 'Finalizado',
                    'este_campo' => Dependencia::NAO_EH_EDITAVEL,
                    'entidade' => 'Application\Entity\Pagamento',
                    'campo' => 'valor',
                ),
            ),
        ),
    ));

可选字段

依赖验证器接受两个额外的可选字段

  • da_associacao: 要检查的字段所在的实体的关联字段
  • caso_contrario: 当检查字段的值与预期不同时的验证规则。
  • se_campos_tem_valores: 接收一个字段和值列表,所有这些值都必须在上下文中得到满足,规则才适用。如果填写此字段,则 se_campotem_valor 字段不再是必需的

da_associacao 的使用示例

    $this->add(array(
        'name' => 'evento',
        'required' => true,
    ));
    $this->add(array(
        'name' => 'documento',
        'required' => false,
        'continue_if_empty' => true,
        'filters' => array(),
        'validators' => array(
            array(
                'name' => 'Dependencia',
                'options' => array(
                    'se_campo' => 'precisa_documento',
                    'da_associacao' => 'evento',
                    'tem_valor' => 'true',
                    'este_campo' => Dependencia::EH_OBRIGATORIO,
                    'entidade' => 'Application\Entity\Convidado',
                ),
            ),
        ),
    ));

da_associação 的情况下,还可以声明嵌套字段,如下例所示

    $this->add(array(
        'name' => 'formaPagamento',
        'required' => true,
    ));
    $this->add(array(
        'name' => 'numeroCheque',
        'required' => false,
        'continue_if_empty' => true,
        'filters' => array(),
        'validators' => array(
            array(
                'name' => 'Dependencia',
                'options' => array(
                    'se_campo' => 'exigeCheque',
                    'da_associacao' => 'formaPagamento.tipoPagamento',
                    'tem_valor' => 'true',
                    'este_campo' => Dependencia::EH_OBRIGATORIO,
                    'entidade' => 'Application\Entity\Convidado',
                ),
            ),
        ),
    ));

caso_contrario 的使用示例

    $this->add(array(
        'name' => 'tipo',
        'required' => true,
    ));
    $this->add(array(
        'name' => 'pessoa_fisica',
        'required' => false,
        'continue_if_empty' => true,
        'filters' => array(),
        'validators' => array(
            array(
                'name' => 'Dependencia',
                'options' => array(
                    'se_campo' => 'tipo',
                    'tem_valor' => 'Pessoa Física',
                    'este_campo' => Dependencia::EH_OBRIGATORIO,
                    'caso_contrario' => Dependencia::DEVE_SER_NULL,
                    'entidade' => 'Application\Entity\Fornecedor',
                ),
            ),
        ),
    ));

se_campos_tem_valores 的使用示例

    $this->add(array(
        'name' => 'status',
        'required' => true,
    ));
    $this->add(array(
        'name' => 'precisa_cotacao',
        'required' => true,
    ));
    $this->add(array(
        'name' => 'valor',
        'required' => false,
        'continue_if_empty' => true,
        'filters' => array(),
        'validators' => array(
            array(
                'name' => 'Dependencia',
                'options' => array(
                    'se_campos_tem_valores' => array(
                        'precisa_cotacao' => true,
                        'status' => 'incluido',
                    ),
                    'este_campo' => Dependencia::DEVE_SER_NULL,
                    'caso_contrario' => Dependencia::EH_OBRIGATORIO,
                    'entidade' => 'Application\Entity\ContPaga',
                ),
            ),
        ),
    ));

辅助类

IfNotNull

为了帮助验证具有条件必需性的字段,该库提供了一种通用的验证器,它仅在字段不为空时应用特定的验证

选项

  • validator: 如果字段不为 null,则应用验证器
  • override_message(可选):验证器失败时的错误消息
  • override_messages(可选):覆盖验证器错误消息的列表

使用示例

    $this->add(array(
        'name'              => 'novoEmail',
        'required'          => false,
        'continue_if_empty' => true,
        'filters' => array(
            array(
                'name' => 'StripTags',
            ),
            array(
                'name' => 'StringTrim',
            ),
        ),
        'validators' => array(
            array(
                'name'    => 'IfNotNull',
                'options' => array(
                    'validator'        => 'EmailAddress',
                    'override_messages' => array(
                        EmailAddress::LENGTH_EXCEEDED => "O email é longo demais",
                    ),
                ),
            ),
            array(
                'name'    => 'Dependencia',
                'options' => array(
                    'se_campo'   => 'email',
                    'tem_valor'  => PessoaFisicaRepository::EMAIL_NOVO,
                    'este_campo' => Dependencia::EH_OBRIGATORIO,
                ),
            ),
        ),
    ));