pandora-una / pandora-valida-dependencia
此包的最新版本(1.3.2)没有提供许可证信息。
检查表单其他字段的验证器
1.3.2
2018-02-20 17:20 UTC
Requires
- php: >=5.3.3
- doctrine/doctrine-orm-module: 0.* || ^1.0
- zendframework/zend-servicemanager: ^2.5
- zendframework/zend-validator: ^2.5
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_campo 和 tem_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, ), ), ), ));