2012-06-14 8 views
11

Я некоторое время сталкивался с проблемой. Как установить ошибки проверки с помощью перенаправления в функции? Это код, у меня в контроллере:Как показать ошибки проверки с помощью перенаправления в codeigniter?

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>'; 
    } 
} 

И это код, который я использую в моей точки зрения файла:

<? 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

Есть ли какая-то особая причина, по которой вы хотите перенаправить?Обычно, когда вы показываете ошибки, они отображаются на странице, на которой они вводятся, поэтому они могут быть исправлены. Вы «могли» использовать flashdata для хранения результата 'validation_errors()', который затем можно получить на перенаправленном на страницу? – Gavin

+0

Да, конечно, я это знаю. Но причина, которая заставила меня перенаправить, заключается в том, что форма находится на главной странице веб-сайта и должна отправлять все данные методу «отправить». После получения каких-либо ошибок, он должен вернуться к предыдущему методу «index». – Afshin

+0

Используется ли метод 'send' для чего-либо другого, кроме как для страницы' index'? – Gavin

ответ

16

Я нашел способ сделать это. Перенаправление не позволяет отображать данные. Я использовал код ниже, чтобы решить эту проблему:

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

Продумайте пожалуйста. Я получаю неопределенный метод «index()» на моем контроллере, если я его использую. Любая ссылка на документацию? –

+0

@AbhishekSaini вам нужно сначала создать метод index() в вашем контроллере. то вы можете включить метод внутри другого – Afshin

2

В соответствии с моим комментарием:

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); 
} 

Во-первых, вам необходимо изменить форму, чтобы она указывала на текущую страницу, то есть current_url() или site_url('controller/index').

Когда вы переходите на index без публикации, он просто пропустит проверку. После отправки формы она проведет проверку.

Затем вы можете использовать встроенные методы form_error или validation_errors, чтобы отображать ошибки в пределах вашего index.

+0

Я знал об этом. Но я просто хотел знать, есть ли способ сделать это, используя redirect – Afshin

+0

Да, однако это сложнее. Вам нужно будет хранить значения '$ _POST' и' validation_errors' в FlashData, а затем отображать ошибку и т. Д. При возврате. Это означает, что вы не можете использовать встроенные функции, и вы эффективно переписываете код без причины. – Gavin

0

наконец я получил решение для редиректа с validation_errors

Это использует, чтобы передать validation_errors в данной сессии, я это сделать, как это

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')); 
    } 

и на странице я использовал

 $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(); 
    } 

Желаю вам этого быстрого решения

7

Я знаю, что это немного поздно, но этот метод творит чудеса для меня.

Если проверка вашей формы в другой функции, чем та форма загружена, вы можете отправить ваш validation_errors() на любую страницу, вы redirect() пропускания метода validation_errors() к $this->session->set_flashdata() так:

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

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

    redirect('/'); 
} 

в своих функций контроллера, где вы хотите, чтобы ваши ошибки или сообщения, которые будут получены, то вы можете установить их в $data массив следующим образом:

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

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

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

в т В начало моих взглядов я обычно включаю:

<?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>'; 
}?> 

Использование твиттер-бутстрапов для форматирования сообщений помогает различать их.

Я включил flashdata message, чтобы вы могли видеть, как независимо от типа сообщения или ошибки, которую вы хотите отправить, вы можете отформатировать их по-разному для всей информации, предупреждений, успешных сообщений и сообщений об ошибках.