2012-06-14 22 views
11

Przez jakiś czas miałem do czynienia z problemem. Jak ustawić błędy sprawdzania poprawności za pomocą przekierowania w funkcji? Jest to kod mam w moim kontrolera:Jak wyświetlać błędy sprawdzania poprawności za pomocą przekierowania w kodzie?

function send() 
{ 
    $this->form_validation->set_rules('e-mail', 'Email', 'trim|required|valid_email'); 
    $this->form_validation->set_rules('cellphone', 'Cellphone Number', 'trim|required|is_natural'); 
    $this->form_validation->set_message('required', '%s is required.'); 
    $this->form_validation->set_message('valid_email', '%s is not a valid Email Address'); 
    $this->form_validation->set_message('is_natural', '%s can only contain numbers.'); 
    $this->form_validation->set_error_delimiters('<li>', '</li>'); 

    if($this->form_validation->run() == FALSE) 
    { 
     redirect ('/'); 
    } 
    else 
    { 
     echo '<pre>'; 
     print_r($_POST); 
     echo '<pre>'; 
    } 
} 

I to jest kod używam w moim pliku Widok:

<? if (validation_errors()) 
{ 
echo '<div id="validation_errors" title="Error:">'; 
echo '<div class="response-msgs errors ui-corner-all"><span>Errors:</span><br /><ul>'; 
echo validation_errors(); 
echo '</ul></div>'; 
echo '</div>'; 
} 
?> 
+0

Czy istnieje jakiś szczególny powód, dla którego chcesz przekierować?Zwykle, gdy pokazują błędy, są one wyświetlane na stronie, na której są wprowadzane, aby można je było poprawić. "Możesz" użyć flashdata do przechowywania wyniku 'validation_errors()', który może być następnie dostępny na przekierowanym na stronę? – Gavin

+0

Tak, oczywiście, że to wiem. Ale powód, który skłonił mnie do przekierowania, polega na tym, że formularz znajduje się na głównej stronie witryny i powinien przesłać wszystkie dane do metody o nazwie "wyślij". Po otrzymaniu jakichkolwiek błędów, powinien powrócić do poprzedniej metody "index". – Afshin

+0

Czy metoda "wyślij" jest używana przez cokolwiek innego, niż na stronie "indeks"? – Gavin

Odpowiedz

16

Znalazłem sposób na zrobienie tego. Przekierowanie nie powoduje wyświetlania danych. Użyłem poniższy kod, aby rozwiązać problem:

if($this->form_validation->run() == FALSE) 
{ 
    $this->index(); 
} 
+0

Skomplikowane proszę. Dostaję niezdefiniowaną metodę "index()" na moim kontrolerze, jeśli używam tego. Jakikolwiek link do dokumentacji? –

+0

@AbhishekSaini musisz najpierw utworzyć metodę index() w kontrolerze. wtedy możesz dołączyć metodę do innej – Afshin

2

Jak na mój komentarz:

function index() 
{ 
    $this->load->library('form_validation'); 
    $data = array 
    (
     'Param' => 'Value' 
    ); 
    if($this->input->post('cellphone', true) !== false) 
    { 
     if($this->form_validation->run() != FALSE) 
     { 
      echo '<pre>' . print_r($_POST, true) . '</pre>'; 
     } 
    } 
    $this->load->view('index', $data); 
} 

pierwsze, musisz zmienić formularz, aby wskazywał bieżącą stronę, tj. current_url() lub site_url('controller/index').

Po przejściu do index bez księgowania, po prostu pominie się sprawdzanie poprawności. Po przesłaniu formularza przeprowadzi on walidację.

Następnie można użyć wbudowanych metod, aby wyświetlić błędy w widoku index.

+0

Wiedziałem o tym. Ale chciałem tylko wiedzieć, czy istnieje sposób, aby to zrobić za pomocą przekierowania – Afshin

+0

Tak, jednak jest to bardziej skomplikowane. Będziesz musiał przechowywać zarówno wartości '$ _POST' i' validation_errors' we FlashData, a następnie wyświetlić błąd itp. Po powrocie. Oznacza to, że nie można korzystać z wbudowanych funkcji i skutecznie przepisujesz kod bez powodu. – Gavin

0

końcu dostał rozwiązanie dla przekierowania z validation_errors

to stosując przekazać validation_errors w danych sesyjnych, robię to tak

if ($this->form_validation->run()) { 
     $data = array(
      'email' => $this->input->post('email'), 
      'is_login' => true 
     ); 
     $this->session->set_userdata($data); 
     redirect($this->input->post('redirect')); 
    } 
    else 
    { 
     $data = array (
      'errors' => validation_errors(), 
      'is_login' => false 
     ); 
     $this->session->set_userdata($data); 
     redirect($this->input->post('redirect')); 
    } 

i na stronie użyłem

 $this->session->set_flashdata('redirectToCurrent', current_url()); 

    if ($this->session->userdata('is_login')) 
    { 
     echo "You are using this as : </br>" . $this->session->userdata('email'); 
     echo "</br><a href='/logout'>Logout</a>"; 
    } 
    else 
    { 
     echo form_open('login'); 
     echo "" . $this->session->userdata('errors'); 
     echo "email : " . form_input('email'); 
     echo "Password : " . form_password('password'); 
     echo form_submit('submit', 'Login'); 
     echo form_hidden('redirect',$this->uri->uri_string()); 
     echo form_close(); 
    } 

Życzę ci tego szybkiego rozwiązania

7

Wiem, że jest trochę za późno, ale ta metoda działa cuda dla mnie.

Jeśli walidacji formularza w innej funkcji niż ta forma jest załadowany, możesz wysłać validation_errors() do każdej strony, którą redirect() przekazując metodę validation_errors() do $this->session->set_flashdata() tak:

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

    $this->session->set_flashdata('error', validation_errors()); 

    redirect('/'); 
} 

W swoich funkcji kontrolera, gdzie chcesz, aby Twoje błędy lub być odbierane wiadomości można ustawić je do tablicy $data tak:

if (!empty($this->session->flashdata('message'))) { 

    $data['message'] = $this->session->flashdata('message'); 
} elseif (!empty($this->session->flashdata('error'))) { 

    $data['error'] = $this->session->flashdata('error'); 
} 

czasie t na górze moich poglądów zwykle zawieram:

<?php if (isset($message)) { 

    echo '<p class="alert alert-info">'.$message.'</p>'; 
} elseif (isset($error)) { 

    echo '<p class="alert alert-danger"><strong>Error: </strong>'.$error.'</p>'; 
}?> 

Używanie klas programu Twitter do formatowania wiadomości pomaga je rozróżnić.

Zawarłem flashdata message, dzięki czemu można zobaczyć, jaki rodzaj komunikatu lub błędu, który chcesz wysłać, możesz sformatować je inaczej dla wszystkich informacji, ostrzeżeń, sukcesów i komunikatów o błędach.

Powiązane problemy