2015-04-16 15 views
7

Sono nuovo a CodeIgniter (v 3.0.0) (proveniente da CakePHP) e sto tentando di impostare messaggi di errore di convalida personalizzati su uno dei miei moduli. Sto utilizzando un file di configurazione per memorizzare tutte le mie regole di convalida, come spiegato here. Questo è il mio application/config/form_validation.php di file:Messaggi di errore di convalida personalizzati nel file di configurazione CodeIgniter

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

$config = array(
    'appointments/signup' => array(
     array(
      'field' => 'admin[name]', 
      'label' => 'Name', 
      'rules' => 'required', 
      'errors' => array(
       'required' => 'Please tell us your %s', 
      ), 
     ), 
     array(
      'field' => 'admin[email]', 
      'label' => 'Email', 
      'rules' => 'required|valid_email|is_unique[users.email]', 
      'errors' => array(
       'required' => 'Please enter your %s address', 
       'valid_email' => 'Please enter a valid email address', 
       'is_unique' => 'That email is already taken. Forgot your password?' 
      ) 
     ), 
     array(
      'field' => 'admin[username]', 
      'label' => 'Username', 
      'rules' => 'required|min_length[4]|max_length[25]|is_unique[user_settings.username]', 
      'errors' => array(
       'required' => 'Please choose a %s', 
       'min_length' => '%s must me at least 4 characters long', 
       'max_length' => '%s cannot exceen 25 characters', 
       'is_unique' => '%s is already taken :(' 
      ) 
     ), 
     array(
      'field' => 'admin[phone_number]', 
      'label' => 'Phone number', 
      'rules' => 'min_length[0]', 
     ), 
     array(
      'field' => 'admin[password]', 
      'label' => 'Password', 
      'rules' => 'required|min_length[8]', 
      'errors' => array(
       'required' => 'Please choose a %s', 
       'min_length' => '%s must be at least 8 characters long' 
      ) 
     ), 
     array(
      'field' => 'admin[passconf]', 
      'label' => 'Password', 
      'rules' => 'required|matches[admin[password]]', 
      'errors' => array(
       'required' => 'Please re-type your %s', 
       'matches' => '%ss do not match' 
      ) 
     ), 
     array(
      'field' => 'company[company_name]', 
      'label' => 'Organization\'s Name', 
      'rules' => 'required', 
      'errors' => array(
       'required' => 'Please tell us your %s', 
      ) 
     ), 
    ), 
); 

Come potete vedere, sto cercando di impostare un feedback convalida personalizzata utilizzando la matrice errors, il più dettagliato here. Ma vedo ancora il messaggio globale predefinito The <field name> field is required..

C'è un modo per impostare i messaggi di convalida personalizzati nel file di configurazione, senza dover modificare il file predefinito globale?

+0

Non ho lavorato con CodeIgniter, ma il tuo campo è 'admin [nome], admin [email], ecc. ... non dovresti avere solo" nome, email, ecc "come campo? –

+0

@AndreSantiago Non penso che sia un requisito ... almeno non è menzionato da nessuna parte. Il motivo per cui ho i nomi dei campi è che raccolgo due tipi distinti di dati: i dati relativi all'amministratore e i relativi dati relativi all'organizzazione. La pagina invia quindi il modulo inviato come richiesta ajax in due variabili POST: '$ _POST ['admin']' e '$ _POST ['company']'. Le regole di convalida funzionano come previsto, tranne che i messaggi di errore personalizzati non vengono visualizzati. –

+0

Penso che dovresti controllare la sezione [Impostazione messaggio di errore] (http://www.codeigniter.com/user_guide/libraries/form_validation.html#setting-error-messages). – Tpojka

risposta

0

può essere che si dovrebbe mettere il vostro campo chiave tra virgolette, come: i messaggi di errore

'field' => "admin['name']" 
2

convalida viene da file di lingua, perché ogni lingua ha il proprio messaggio di errore

penso che si può cambiare messaggi di errore di convalida nei file di lingua.

+0

Chiede informazioni sulle regole personalizzate, non su quelle incorporate. Quelli provengono dal file della lingua, ma dovrebbero essere sostituiti e non modificati modificando i file principali. Probabilmente. – stef

0

In primo luogo, assicurarsi di utilizzare Codeigniter 3 non una qualsiasi versione di Codeigniter 2.x.x.

ero nei guai con lo stesso problema e ha scoperto che la matrice errors è disponibile in Codeigniter 3 version e le regole di configurazione si trovano in metodo run() di form_validation, quindi se vedete la funzione set_rules in Form_validation.php file può vedere il 4 esimo parametro che è errors

/** 
* Set Rules 
* 
* This function takes an array of field names and validation 
* rules as input, any custom error messages, validates the info, 
* and stores it 
* 
* @param mixed $field 
* @param string $label 
* @param mixed $rules 
* @param array $errors 
* @return CI_Form_validation 
*/ 
public function set_rules($field, $label = '', $rules = array(), $errors = array()) 
{ 
    ..... 

e che non è disponibile nella versione 2.2 -stabile, vedere Form_validation.php, e vedere il pezzo di codice che mostra la differenza

/** 
* Set Rules 
* 
* This function takes an array of field names and validation 
* rules as input, validates the info, and stores it 
* 
* @access public 
* @param mixed 
* @param string 
* @return void 
*/ 
public function set_rules($field, $label = '', $rules = '') 
{ 
    .... 
4

cercare di cambiare l'ordine delle chiavi nella propria matrice, qualcosa di simile:

'appointments/signup' => array(
    array(
     'field' => 'admin[name]', 
     'label' => 'Name', 
     'errors' => array(
      'required' => 'Please tell us your %s', 
     ), 
     'rules' => 'required', 
    ) 

lo stesso identico problema stava accadendo a me, e dopo un po 'di debug sulle classi di base, mi sentivo abbastanza stupido da provare questo.

Sembra un errore, ma non sono andato oltre.

Sto usando la versione 3.0.1.



UPDATE

mi sbagliavo, se questo stava accadendo sulla v 3.0.0, non sta accadendo sul 3.0.1. Quello che ho descritto sopra è stato che ho commesso un errore con parentesi nel mio array.

Tutto funziona come dovrebbe.

+0

Anche io sto affrontando lo stesso problema. La mia versione è definita ('CI_VERSION', '3.1.0'). Finalmente seguo il tuo passo ... Saluti !! –

0

Non provare a utilizzare la chiamata diretta per registrarsi (nome_file). $ this-> form_validation-> run ('iscrizione')

Usa metodo alternativo - (controller_name/function_name)

$config = array(
    'Authenticate_user/signup' => array(
    array(
      'field' => 'firstname', 
      'label' => 'Name', 
      'rules' => 'trim|required' 
    ), 
    array(
      'field' => 'useremail', 
      'label' => 'Email ID', 
      'rules' => 'trim|required|callback_check_unique_emailid' 

    ), 

    array(
      'field' => 'gender', 
      'label' => 'Gender', 
      'rules' => 'trim|required' 
    ), 
    array(
      'field' => 'age', 
      'label' => 'Age', 
      'rules' => 'trim|required' 
    ), 
    array(
      'field' => 'passcode', 
      'label' => 'Password', 
      'rules' => 'trim|required' 
    ), 
    array(
      'field' => 'confirmpasscode', 
      'label' => 'Confirm Password', 
      'rules' => 'required|matches[passcode]', 
      'errors' => array(
      'matches[passcode]' => 'Only number is allowed' 
     ) 
    ), 
    array(
      'field' => 'usertype', 
      'label' => 'User Type', 
      'rules' => 'trim|required' 
    ), 
    array(
      'field' => 'country', 
      'label' => 'Country', 
      'rules' => 'trim|required' 
    ), 
    array(
      'field' => 'state', 
      'label' => 'State', 
      'rules' => 'trim|required' 
    ), 
    array(
      'field' => 'category', 
      'label' => 'Category', 
      'rules' => 'required' 
    ) 

));

quindi chiamare simile,

if ($ this-> form_validation-> run() == false) {...}

applausi !!!

Problemi correlati