在同一字段中,我有兩種可能的數據類型: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']]
];
}
'[['cnpj_cpf'],'string','max'=> 18]'??? – soju
我刪除了該行,問題依然存在。 –