CodeIgniter config dosyasındaki özel doğrulama hata mesajları

CodeIgniter'da (v 3.0.0) yeniyim (CakePHP'den geliyor) ve formlarımdan birine özel doğrulama hata mesajları vermeye çalışıyorum. Doğrulama kurallarımı saklamak için bir yapılandırma dosyası kullanıyorum, açıklandığı gibi burada . Bu benim uygulama/config/form_validation.php dosyam:

<?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',
            )
        ),
    ),
);

As you can see, I'm trying to set custom validation feedback using the errors array, as detailed here. But I still see the global default The field is required. message.

Genel varsayılan dosyayı düzenlemek zorunda kalmadan, yapılandırma dosyasında özel doğrulama iletilerini ayarlamanın bir yolu var mı?

7
CodeIgniter ile çalışmadım, ancak alanınız admin [isim], admin [email], vb. ... olarak yalnızca isim, e-posta, vb. alan?
katma yazar Andre S, kaynak
Form doğrulama kitaplığını autoload.php adresinize eklediniz mi ya da kitaplığı denetleyiciye mi yüklüyorsunuz? Denetleyicinizden ilgili yöntemleri dahil etmek için soruyu düzenler misiniz?
katma yazar Craine, kaynak
Form doğrulama kitaplığını autoload.php adresinize eklediniz mi ya da kitaplığı denetleyiciye mi yüklüyorsunuz? Denetleyicinizden ilgili yöntemleri dahil etmek için soruyu düzenler misiniz?
katma yazar Craine, kaynak
Hata İletisini Ayarlama bölümünü kontrol etmeniz gerektiğini düşünüyorum .
katma yazar Tpojka, kaynak
Sorduğum için üzgünüm, özel yapılandırma dosyasını yüklediniz mi?
katma yazar Tpojka, kaynak
Sorduğum için üzgünüm, özel yapılandırma dosyasını yüklediniz mi?
katma yazar Tpojka, kaynak
if ($ this-> form_validation-> run ('signup') == FALSE) {$ this-> load-> view ('myform'); } else {$ this-> load-> görünümü ('formsuccess'); } Formlarınızı doğrulamaya çalışırken bunu denediniz mi?
katma yazar RobertoNovelo, kaynak
if ($ this-> form_validation-> run ('signup') == FALSE) {$ this-> load-> view ('myform'); } else {$ this-> load-> görünümü ('formsuccess'); } Formlarınızı doğrulamaya çalışırken bunu denediniz mi?
katma yazar RobertoNovelo, kaynak
Kural grubunu sadece kaydolma olarak yeniden adlandırmayı denedim, sonra denetleyicide $ this-> form_validation-> run ('signup') ile manuel olarak çağırdım. Yine de aynı varsayılan mesajlar.
katma yazar Agent.Logic_, kaynak
Kural grubunu sadece kaydolma olarak yeniden adlandırmayı denedim, sonra denetleyicide $ this-> form_validation-> run ('signup') ile manuel olarak çağırdım. Yine de aynı varsayılan mesajlar.
katma yazar Agent.Logic_, kaynak
@RobertoNovelo dokümantasyon , validasyon kural gruplarımı controller/method biçiminde adlandırırsam, $ this-> form_validation-> run ('kaydolması)' nı manuel olarak aramam gerekmez. ') ; bunun yerine, basitçe $ this-> form_validation-> run() yapabilirim ve CodeIgniter geçerli denetleyicinin işleminin doğrulama grubunu otomatik olarak çalıştırabilir.
katma yazar Agent.Logic_, kaynak
Zorunda mıyım? belgeler , kural grubumu controller_name/method_name biçiminde adlandırırsam automatic olduğunu söylüyor. Her neyse, doğrulama kasıtlı olarak geçersiz veri girdiğimde beklendiği gibi çalışıyor ve form doğru verilerdeyken form doğru şekilde gönderiliyor. Bu yüzden (çoğunlukla) doğru şeyler yapıyor olmalıyım.
katma yazar Agent.Logic_, kaynak
Zorunda mıyım? belgeler , kural grubumu controller_name/method_name biçiminde adlandırırsam automatic olduğunu söylüyor. Her neyse, doğrulama kasıtlı olarak geçersiz veri girdiğimde beklendiği gibi çalışıyor ve form doğru verilerdeyken form doğru şekilde gönderiliyor. Bu yüzden (çoğunlukla) doğru şeyler yapıyor olmalıyım.
katma yazar Agent.Logic_, kaynak
@Tpojka Form Validation ile ilgili sayfanın tamamını okudum. Doğrulama ile ilgili tüm işlerimi bir yerde tutmanın bir yolu yoksa, muhtemelen o rotayı izlemem gerekecek.
katma yazar Agent.Logic_, kaynak
@AndreSantiago Bunun bir gereklilik olduğunu sanmıyorum ... en azından hiçbir yerde bahsedilmedi. Bunun gibi alanlara sahip olmamın nedeni iki ayrı veri türü toplamaktır: yönetici ile ilgili veriler ve bunların organizasyonla ilgili verileri. Sayfa daha sonra gönderilen formu iki POST değişkeninde bir ajax isteği olarak gönderir: $ _POST ['admin'] ve $ _POST ['company'] . Doğrulama kuralları, beklendiği gibi çalışır, ancak özel hata mesajları gösterilmez.
katma yazar Agent.Logic_, kaynak

12 cevap

Dizinizdeki tuşların sırasını değiştirmeye çalışın, bunun gibi:

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

Aynı sorun benim de başıma geliyordu ve çekirdek sınıflardaki bazı hata ayıklamalardan sonra, bunu denemek için yeterince aptal hissediyordum.

Bir böcek gibi görünüyor, ama daha ileri gitmedim.

3.0.1 sürümünü kullanıyorum.



UPDATE

Yanıldım, eğer bu v 3.0.0'da oluyorsa, 3.0.1'de gerçekleşmiyordu. Yukarıda tarif ettiğim, dizimdeki parantez içinde hata yapmaktı.

Her şey olması gerektiği gibi çalışıyor.

4
katma
Ben de aynı problemle karşı karşıyayım. Sürümüm tanımlandı ('CI_VERSION', '3.1.0'). Sonunda adımını takip ediyorum ... Şerefe!
katma yazar Rajnesh Thakur, kaynak

Dizinizdeki tuşların sırasını değiştirmeye çalışın, bunun gibi:

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

Aynı sorun benim de başıma geliyordu ve çekirdek sınıflardaki bazı hata ayıklamalardan sonra, bunu denemek için yeterince aptal hissediyordum.

Bir böcek gibi görünüyor, ama daha ileri gitmedim.

3.0.1 sürümünü kullanıyorum.



UPDATE

Yanıldım, eğer bu v 3.0.0'da oluyorsa, 3.0.1'de gerçekleşmiyordu. Yukarıda tarif ettiğim, dizimdeki parantez içinde hata yapmaktı.

Her şey olması gerektiği gibi çalışıyor.

4
katma
Ben de aynı problemle karşı karşıyayım. Sürümüm tanımlandı ('CI_VERSION', '3.1.0'). Sonunda adımını takip ediyorum ... Şerefe!
katma yazar Rajnesh Thakur, kaynak

Doğrulama hata mesajları dil dosyalarından gelir çünkü her dilin kendi hata mesajı vardır.

Doğrulama hata mesajlarını dil dosyalarında değiştirebileceğinizi düşünüyorum.

2
katma
Özel kuralları soruyor, yerleşik kuralları değil. Bunlar dil dosyasından geliyor ancak geçersiz kılınmalı ve çekirdek dosyalar düzenlenerek değiştirilmemelidir. Muhtemelen.
katma yazar stef, kaynak

Doğrulama hata mesajları dil dosyalarından gelir çünkü her dilin kendi hata mesajı vardır.

Doğrulama hata mesajlarını dil dosyalarında değiştirebileceğinizi düşünüyorum.

2
katma
Özel kuralları soruyor, yerleşik kuralları değil. Bunlar dil dosyasından geliyor ancak geçersiz kılınmalı ve çekirdek dosyalar düzenlenerek değiştirilmemelidir. Muhtemelen.
katma yazar stef, kaynak

Öncelikle, Codeigniter 2.x.x sürümünün hiçbirini Codeigniter 3 kullandığınızdan emin olun.

I was in trouble with the same issue and found that the errors array is available in Codeigniter 3 version and the config rules are set in form_validation's run() method, so if you see the set_rules function in Form_validation.php file you will see the 4th parameter which is 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())
{
   .....

2.2 sürümlü sürümde kullanılamaz ve bkz. PHP "rel =" nofollow "> Form_validation.php ve aradaki farkı gösteren kod parçasını görün

/**
 * 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 = '')
{
   ....
0
katma

Öncelikle, Codeigniter 2.x.x sürümünün hiçbirini Codeigniter 3 kullandığınızdan emin olun.

I was in trouble with the same issue and found that the errors array is available in Codeigniter 3 version and the config rules are set in form_validation's run() method, so if you see the set_rules function in Form_validation.php file you will see the 4th parameter which is 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())
{
   .....

2.2 sürümlü sürümde kullanılamaz ve bkz. PHP "rel =" nofollow "> Form_validation.php ve aradaki farkı gösteren kod parçasını görün

/**
 * 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 = '')
{
   ....
0
katma

Lütfen uygulama/yardımcılar altındaki yardımcıları kullanmayı deneyin ve doğrulama hatalarınızı işlevinde tanımlayın. Ardından, doğrulama kurallarına erişmeyi deneyin veya uygulama/hatalar altındaki hataları kullanın. lütfen https://ellislab.com/codeigniter/user-guide/general/helpers adresine bakın. .html

0
katma

Lütfen uygulama/yardımcılar altındaki yardımcıları kullanmayı deneyin ve doğrulama hatalarınızı işlevinde tanımlayın. Ardından, doğrulama kurallarına erişmeyi deneyin veya uygulama/hatalar altındaki hataları kullanın. lütfen https://ellislab.com/codeigniter/user-guide/general/helpers adresine bakın. .html

0
katma

Anahtar alanınızı aşağıdaki gibi ters virgüllere sokmanız gerekebilir:

'field' => "admin['name']"
0
katma

Anahtar alanınızı aşağıdaki gibi ters virgüllere sokmanız gerekebilir:

'field' => "admin['name']"
0
katma

Do not try use direct call to signup(your_func_name). $this->form_validation->run('signup')

Use alternate method - (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'
    )

));

sonra ara

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

şerefe !!!

0
katma

Do not try use direct call to signup(your_func_name). $this->form_validation->run('signup')

Use alternate method - (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'
    )

));

sonra ara

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

şerefe !!!

0
katma