在同一个字段中,我有两种可能的数据类型:CPF
和CNPJ
。我单独使用custom component进行验证,例如:
['cnpj', CnpjValidator::className(), 'skipOnError' => true]
或
['cpf', CpfValidator::className(), 'skipOnError' => true]
但是我尝试将两个类用于同一个字段cnpj_cpf
并且它没有成功。规则将根据属于同一模型的natureza
属性单独应用。
类似的东西:
if($model->natureza == 'F'){
// apply CpfValidator::className()
else {
// apply CnpjValidator::className()
}
@edit
规则方法
public function rules()
{
return [
[['nome', 'nome_abrev', 'email', 'cliente_grupo_id'], 'required'],
[['email', 'email_nfe'], 'email'],
['cnpj_cpf', CnpjValidator::className(), 'skipOnError' => true, 'when' => function($model){
return $model->natureza == 'J';
}],
['cnpj_cpf', CpfValidator::className(), 'skipOnError' => true, 'when' => function($model){
return $model->natureza == 'F';
}],
[['natureza', 'observacoes'], 'string'],
[['ativo', 'gera_gnre', 'simples_nacional', 'sintegra', 'emitir_laudo', 'controla_pallet', 'controla_edi', 'regime_especial', 'gera_st', 'termos_industrializacao', 'termo_isencao', 'cod_suframa', 'insc_subs_tributaria', 'ean', 'cliente_grupo_id', 'cliente_ramo_atividade_id', 'localizacao_microrregiao_id', 'venda_canal_id', 'venda_condicao_pagamento_id', 'usuario_representante_id'], 'integer'],
[['data_suframa','limite_credito_validade','data_insc_subs_tributaria'], 'default', 'value' => null],
[['data_suframa', 'data_insc_subs_tributaria', 'limite_credito_validade'], 'safe'],
[['limite_credito', 'desconto_financeiro'], 'number'],
[['nome', 'nome_abrev', 'insc_estadual', 'insc_municipal', 'email', 'email_nfe', 'website', 'banco', 'banco_ag', 'banco_cc', 'natureza_operacao'], 'string', 'max' => 255],
[['cnpj_cpf'], 'string', 'max' => 18],
[['website'], 'url', 'defaultScheme' => 'http'],
[['nome_abrev'], 'unique'],
[['venda_canal_id'], 'exist', 'skipOnError' => true, 'targetClass' => VendaCanal::className(), 'targetAttribute' => ['venda_canal_id' => 'id']],
[['venda_condicao_pagamento_id'], 'exist', 'skipOnError' => true, 'targetClass' => VendaCondicaoPagamento::className(), 'targetAttribute' => ['venda_condicao_pagamento_id' => 'id']],
[['cliente_grupo_id'], 'exist', 'skipOnError' => true, 'targetClass' => ClienteGrupo::className(), 'targetAttribute' => ['cliente_grupo_id' => 'id']],
[['localizacao_microrregiao_id'], 'exist', 'skipOnError' => true, 'targetClass' => LocalizacaoMicrorregiao::className(), 'targetAttribute' => ['localizacao_microrregiao_id' => 'id']],
[['cliente_ramo_atividade_id'], 'exist', 'skipOnError' => true, 'targetClass' => ClienteRamoAtividade::className(), 'targetAttribute' => ['cliente_ramo_atividade_id' => 'id']],
[['usuario_representante_id'], 'exist', 'skipOnError' => true, 'targetClass' => UsuarioRepresentante::className(), 'targetAttribute' => ['usuario_representante_id' => 'id']]
];
}
答案 0 :(得分:1)
你可以尝试:
['cnpj_cpf', CnpjValidator::className(), 'skipOnError' => true, 'when' => function($model){
return $model->natureza != 'F';
}],
['cnpj_cpf', CpfValidator::className(), 'skipOnError' => true, 'when' => function($model){
return $model->natureza == 'F';
}],