2016-10-04 27 views
1

在同一字段中,我有兩種可能的數據類型:CPFCNPJ。我使用驗證一個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

'[['cnpj_cpf'],'string','max'=> 18]'??? – soju

+0

我刪除了該行,問題依然存在。 –

回答

1

你可以嘗試:

​​3210

瞭解更多關於Conditional Validation

+0

我嘗試了您的解決方案,但即使使用正確的值,也總是會收到無效的消息。單獨工作正常。好像有條件不服從... –

+0

我改變'when'到'whenClient'並且工作! –

+0

你的意思是你添加了whenClient選項?這是不一樣的...... – soju

相關問題