Проверка формы Codeigniter: Как перенаправить на предыдущую страницу, если обнаружена какая-либо ошибка проверки? - PullRequest
6 голосов
/ 28 октября 2011

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

В моем контроллере:

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

  //**** Here is where I need to redirect  

} else  {
     // code to send data to model...           

  }                             

Ответы [ 4 ]

11 голосов
/ 18 февраля 2013

Я расширил URL помощника для этого.

https://github.com/jonathanazulay/CodeIgniter-extensions/blob/master/MY_url_helper.php

В вашем контроллере:

$this->load->helper('url');
redirect_back();

Просто вставьте MY_url_helper.php в application/helpers и все готово.

5 голосов
/ 28 октября 2011

UPDATE

Вы хотите опубликовать форму, проверить ее, затем снова показать форму с ошибками проверки, если проверка не пройдена, или показать что-то совершенно иное, если проверка прошла успешно.

Лучший способ сделать это - отправить форму обратно в себя. Таким образом, действие вашей формы будет action="". Таким образом, в вашем методе вы можете проверить, была ли отправлена ​​форма, и определить, что там делать:

// in my form method
if ($this->input->post('submit')) // make sure your submit button has a value of submit
{
     // the form was submitted, so validate it
     if ($this->form_validation->run() == FALSE)
     {
         $this->load->view('myform');
 }
 else
 {
         $this->load->view('formsuccess');
 }
}
else
{
    // the form wasn't submitted, so we need to see the form
    $this->load->view('myform');
}

СТАРЫЙ ОТВЕТ

Вы всегда можете передать текущий URI в скрытое поле в форме:

<input name="redirect" type="hidden" value="<?= $this->uri->uri_string() ?>" />

А затем перенаправить в случае сбоя проверки:

redirect($this->input->post('redirect'));

Или вы можете установить URL перенаправления в переменной сеанса flashdata:

// in the method that displays the form
$this->session->set_flashdata('redirect', $this->uri->uri_string());

А затем перенаправить в случае сбоя проверки:

redirect($this->session->flashdata('redirect'));
0 голосов
/ 29 октября 2011

Я создал функцию внутри библиотеки для создания перенаправлений, когда они мне нужны.

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

class Functions {

public function generateRedirectURL()
{
$CI =& get_instance();
$preURL = parse_url($_SERVER['REQUEST_URI']);
$redirectUrl = array('redirectUrl' => 'http://' . $_SERVER['SERVER_NAME'] . $preURL['path']);
$CI->session->set_userdata($redirectUrl);
}

}

//End of the file

и когда вы хотите создать перенаправление на эту страницу, просто напишите в функции:

$this->load->library('functions'); //you can put it in the autoloader config
$this->functions->generateRedirectURL();

Тогда вам нужно всего лишь позвонить:

redirect($this->session->userdata['redirectUrl']);
0 голосов
/ 28 октября 2011

Ну, обычно вы должны сделать это так (псевдокод на данный момент):

  • если form_validation == false -> форма еще не отправлена ​​или проверка не пройдена -> загрузить формуview;
  • if form_validation == true -> выполнить обработку.

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

Если вы все еще чувствуете желание перенаправить, вызовите соответствующую функцию:

redirect('updatebatch/get/40','refresh');
// assuming 'updatebatch' is the name of your controller, and 'sundial' just a folder
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...