2009-01-22 22 views
14

yerine "dizisi" olarak sonucu alın CodeIgniter kullanarak form doğrulama sınıfımı yazıyorum. İsim değer çiftinde hata mesajları alabilmem için herhangi bir yolu var mı? Örneğin, bir örnek formda dört alan vardır: user_name, password, password_conf ve timezone. Aralarında user_name ve password doğrulama yürüttükten sonra başarısız aşağıdadır: gerçektenCodeIgniter Form Validation - "string"

Array 
{ 
    'user_name' => 'user name is required', 
    'password' => 'passord is required' 
} 

I: yukarıdaki fonksiyon false döndürürse

$result = $this->form_validation->run(); 

, aşağıdaki gibi isim değer çiftleri hataları almak istiyorum AJAX çağrısına geri dönebileceğim bir JSON oluşturmak istiyorum. Ben (kirli) bir çözüm vardır: Aşağıdaki gibi birer doğrulama yöntemleri birini çağırabilirsiniz:

$this->form_validation->required($user_name); 
$this->form_validation->required($password); 

var mı başka bir şekilde, bütün hata mesajlarını adı değer çiftinin seferde alınır?

DÜZENLEME: orada ben CodeIgniter doğrulama kullanıyorum, sunucu tarafında yaklaşık

jQuery istemci tarafı doğrulama yardımcı olacaktır, ama ne: Ben cevaplar birinden jQuery ile doğrulama yapmak için önerildi.

O öyle tasarladık:

  1. Ben AJAX kullanarak tüm değerleri göndermek.
  2. Sunucu tarafında doğrulama (PHP).
  3. Girişler geçerliyse istenen işlemi gerçekleştirin; başka kullanıcıya hata döndürün.

cevap

16

: ben gibi kütüphane CI_Form_validation artırdık: -

Biliyorum
class MY_Form_validation extends CI_Form_validation 
{ 
    public function getErrorsArray() 
    { 
     return $this->_error_array; 
    } 
} 

, bu kesmek, ama zaman benim ihtiyacını görev yapacak . Umarım CodeIginter ekibi yakında bu diziye erişmek için bir arayüz ile gelir.

+2

Hiç bir hack değil, OOP'un tamamı budur. Aynı yoldan aşağı iniyorum ve bu benim başka bir alternatif görmediğim için son oyunum. – thenetimp

+4

Bu kesinlikle iyi bir çözümdür. Bu işlevselliğe sahip olmamak için codeigniter üzerinde utanç! –

+0

Ancak bu bir değer döndürmez. Bir fikrin neden? Bu işaretçiyi $ derken, _error_array'ın korunduğunu görüyorum. Dizi her zaman boş döner. –

1

codeıgniter doğrulama olarak gören formu göndermeden önce tamamen istemci tarafında doğrular jquery validation plugin gibi bir şey kullanmak daha iyi olmaz Sana normal sayfa yenileme hata mesajları veriyor? Bu şekilde AJAX gerekli değildir.

DÜZENLEME: Sunucu tarafı doğrulaması yapmamanızı önermiyorum, yalnızca doğrulamak için AJAX ile gönderme yapmak gerekli değildir ve istemci tarafı yaparsanız sunucu isabetleri azalır. Hatalarla veya bir başarı iletisiyle düzenli sayfa yenilemesine ayrılacak.

Ben CodeIgniter koduna bakarak tek yön kendim buldum
+3

İstemci tarafı doğrulaması tek endişeniz olmamalı, arka uç doğrulaması çok daha önemlidir. –

+0

Doğru, bu aptalca olurdu. Sunucu tarafı doğrulaması yapmamanızı önermedim - düzenlememi ve orijinal yazımı tekrar oku. – roborourke

+0

Ayrıca, bazen doğrulama Gerekirse, örneğin bir veritabanı tablosuna karşı bir şeyi doğrulamak için arka plan yapılması GEREKİR (tablodaki teklik) – MaxiWheat

1

Ben doğrulama kütüphanesi yerde bir işlev ekleme veya uzayan içermeyen iyi gibi çözüm:

$validator =& _get_validation_object(); 
$error_messages = $validator->_error_array; 

Referans: http://thesimplesynthesis.com/post/how-to-get-form-validation-errors-as-an-array-in-codeigniter/

Kodunuzdaki herhangi bir noktada diyoruz gerekir .Ayrıca, bunu da tartışan bir newer thread olduğunu belirtmekte fayda var.

+0

'$ this-> form_validation-> error_array();' zaten kütüphanede. Neden kullanmıyorsun? – masterFly

1

Burada mayın

3

public function add_cat_form() 
 
    { 
 
     $this->output->unset_template(); 
 
     $this->load->library('form_validation'); 
 
     $this->form_validation->set_rules('name', 'Name', 'required'); 
 
     if ($this->form_validation->run()) 
 
     { 
 
      if (IS_AJAX) 
 
      { 
 
       $dataForInsert = $this->input->post(); 
 
       if ($dataForInsert['parentid'] == -1) 
 
       { 
 
        unset($dataForInsert['parentid']); 
 
       } 
 
       $this->post_model->add_cat($dataForInsert); 
 
       echo json_encode('success'); 
 
      } else 
 
      { 
 
       #in case of not using AJAX, the AJAX const defined 
 
      } 
 
     } else 
 
     { 
 
      if (IS_AJAX) 
 
      { 
 
       #This will be return form_validation error in an array 
 
       $output = $this->return_form_validation_error($this->input->post()); 
 
       echo $output = json_encode($output); 
 
      } else 
 
      { 
 
       #in case of not using AJAX, the AJAX const defined 
 
      } 
 
     } 
 
    }
olduğunu denetleyicinizdeki

private function return_form_validation_error($input) 
{ 
    $output = array(); 
    foreach ($input as $key => $value) 
    { 
     $output[$key] = form_error($key); 
    } 
    return $output; 
} 

ve sonra geçerlilik yönteminde, sadece bu çağrı bir özel fonksiyon oluşturabilir

Sadece can kullanım,

$this->form_validation->error_array();

Bu, CodeIgniter öğesinin class reference documentation'dur.