Ответ 1
Я нашел способ сделать это. Перенаправление не позволяет отображать данные. Я использовал приведенный ниже код для решения проблемы:
if($this->form_validation->run() == FALSE)
{
$this->index();
}
Некоторое время я сталкивался с проблемой. Как установить ошибки проверки с помощью перенаправления в функции? Это код, который у меня есть в контроллере:
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>';
}
?>
Я нашел способ сделать это. Перенаправление не позволяет отображать данные. Я использовал приведенный ниже код для решения проблемы:
if($this->form_validation->run() == FALSE)
{
$this->index();
}
Я знаю это немного поздно, но этот метод творит чудеса для меня.
Если вы проверяете свою форму в другой функции, кроме той, в которой загружена форма, вы можете отправить validation_errors()
на любую redirect()
страницу 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>';
}?>
Использование twitter bootstrap для форматирования сообщений помогает их дифференцировать.
Я включил message
flashdata, чтобы вы могли видеть, какой тип сообщения или ошибки вы хотите отправить, вы можете отформатировать их по-разному для всей информации, предупреждений, успешных сообщений и сообщений об ошибках.
Согласно моему комментарию:
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);
}
Во-первых, вам нужно изменить форму, чтобы она site_url('controller/index')
на текущую страницу, то есть current_url()
или site_url('controller/index')
.
Когда вы переходите к index
без публикации, он просто пропустит проверку. После отправки формы она проведет проверку.
Затем вы можете использовать встроенные методы form_error
или validation_errors
для отображения ошибок в вашем index
представлении.
наконец, я получил решение для перенаправления с 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();
}
Желаю вам этого быстрого решения