Codeigniter Form Doğrulama - başarısından sonra unset form değerleri nasıl?

5 Cevap php

Ben bu isteği (ayrı bir 'başarı' sayfa görünümü öneren) CI belgelerde verilen örnekte aykırı farkındayım, ama bir formu başarıyla teslim edildikten sonra, belirli bir form görünümünde reutilise istiyorum - Bir görüntüleyen daha sonra bir başarı iletisi görüntüleniyor boş bir form. Ben ($ _POST unsetting boş bir diziye kurallar / alanları belirleme ve doğrulama rerunning) doğrulama set değerleri temizlemek için başarısız bir kaç yolu denedim.

Ben aynı sayfaya yönlendirme olabilir, ama sonra bir başarı mesajı görüntülemek için bir oturum değişkeni ayarlamak gerekiyor - dağınık bir yaklaşımdır.

En iyi nasıl yukarıda ulaşmak için herhangi bir fikir?

5 Cevap

Kendisine yönlendir. Bu şekilde, hiçbir gönderimler Bu da size flash_data göstermek için bir yol verir ... çalıştırmak edilmiştir.

    $this->load->library('form_validation');

    $this->form_validation->set_rules('firstname', 'First Name', 'required');
    $this->form_validation->set_rules('surname', 'Sur Name', 'required');

    if ($this->form_validation->run() === TRUE)
    {
                    // save data

        $this->session->set_flashdata('message', 'New Contact has been added');
        redirect(current_url());
    }

    $this->load->view('contacts/add', $this->data);

Başka bir çözüm, kütüphane uzatmak CI_Form_validation. Özelliği $_field_data korunur, böylece biz onu acces olabilir:

class MY_Form_validation extends CI_Form_validation {

    public function __construct()
    {
        parent::__construct();
    }

    public function clear_field_data() {

        $this->_field_data = array();
        return $this;
    }
}

Ve yeni bir yöntem diyoruz. Bu şekilde, oturumda veri depolama olmadan veri iletebilirsiniz.

    class Item extends Controller
    {
        function Item()
        {
            parent::Controller();
        }

        function add()
        {
            $this->load->library('form_validation');
            $this->form_validation->set_rules('name', 'name', 'required');

            $success = false;

            if ($this->form_validation->run())
            {
                $success = true;
                $this->form_validation->clear_field_data();
            }

            $this->load->view('item/add', array('success' => $success));
        }
    }

Set_value fonksiyonu $ _POST dizi Form_validation nesneden değerini getirir değil. Form_validation nesne bir değişken olarak $ _field_data yılında yayınlanan değerlerin kendi kopyasını saklar.

Onun kesmek, ancak başarılı bir gönderme dokunduktan sonra bu değişkeni silmek olabilir:

class Item extends Controller
{
    function Item()
    {
        parent::Controller();
        $this->load->model('item_model');
    }

    function add()
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('name', 'name', 'required');

        $success = false;

        if ($this->form_validation->run())
        {
            $this->item_model->add_item($this->input->post('name'));
            $success = true;

            // Look away now. Hack coming up!
            // Clear the form validation field data
            $this->form_validation->_field_data = array();
        }

        $this->load->view('item/add', array('success' => $success));
    }
}

Koşullu form değerlerini ayarlar sizin manzaralı bir DOĞRU / YANLIŞ değişken geçmek.

Denetleyici

if($this->form_validation->run())
{
    $data['reset'] = TRUE;
}
else
{
    $data['reset'] = FALSE:
}

$this->load->view("form", $data);

Görünüm:

<input type="text" name="email" value="<?php echo ($reset) ? "" : set_value('email'); ?>" />

<input type="text" name="first_name" value="<?php echo ($reset) ? "" : set_value('first_name'); ?>" />

Hope this would be helpful. Finally I understand the whole concept of the extending the library. All you need to do is
Step 1: In this directory "application/libraries/" create a file named "MY_Form_validation.php" with the following php code

<?php if (!defined('BASEPATH')) exit('No direct script access allowed.');
class MY_Form_validation extends CI_Form_validation {

 public function MY_Form_validation() {
    parent::__construct();
  }

  public function unset_field_data()
    {    
        unset($this->_field_data);    
    }
}

Step 2: Sonra işlevini kullanın "unset_field_data()" size denetleyicisi. Aşağıdaki örneğin:

    if ($this->form_validation->run())
    {
        $this->item_model->add_item($this->input->post('name'));
        $success = true;

        $this->form_validation->unset_field_data();
    }