如何在CodeIgniter中的不同函数中将后方法表单提交给同一个get-url?

时间:2012-02-17 04:13:19

标签: php codeigniter

我发现CodeIgniter表单验证显示带有load-> view方法的错误消息,如果使用“redirect”,则会丢失字段错误消息。

目前我使用一个函数来显示表单页面,另一个函数来处理表单发布。

class Users extends CI_Controller {
  function __construct() {
      parent::__construct();
  }

  public function sign_up()
  {
    $this->load->view('users/sign_up');
  }

public function do_sign_up(){
      $this->form_validation->set_rules('user_login', 'User Name', 'trim|required|is_unique[users.login]');
      $this->form_validation->set_rules('user_email', 'Email', 'trim|required|valid_email|is_unique[users.email]');

      if ($this->form_validation->run() == FALSE) {
          $this->load->view('users/sign_up');
      }else {
       // save post user data to users table
       redirect_to("users/sign_in");
}


当表单验证失败时,浏览器中的url会更改为“/ users / do_sign_up”,我想在sign_up页面中保留相同的URL。

在表单验证中使用redirect(“users / sign_up”)方法失败将保持相同的URL,但验证错误消息将丢失。

在Rails中,我不能像这样使用路由来配置:

get "users/sign_up"       => "users#signup"
post "users/sign_up"       => "users#do_signup"

2 个答案:

答案 0 :(得分:5)

imho没有必要检查请求方法,因为如果用户'GET'到页面你要显示注册视图...如果他们用户'POST'到页面并且验证失败你也想要显示注册视图。当用户'POST'到页面并通过验证时,您只是不想显示注册视图。

imho这是CodeIgniter中最优雅的方式:

public function sign_up()
{
    // Setup form validation
    $this->form_validation->set_rules(array(
        //...do stuff...
    ));

    // Run form validation
    if ($this->form_validation->run()) 
    {
        //...do stuff...
        redirect('');
    }

    // Load view
    $this->load->view('sign_up');
}

顺便说一句,这就是我在config / routes.php中所做的事情,使我的CI变得像RoR一样。请记住,你的routes.php只是一个普通的php文件,所以你可以根据请求方法设置一个开关来生成不同的路由。

switch ($_SERVER['REQUEST_METHOD'])
{
    case 'GET':
        $route['users/sign_up'] = "users/signup";
    break;
    case 'POST':
        $route['users/sign_up'] = "users/do_signup";
    break;
}

答案 1 :(得分:-2)

<button type="submit"class="md-btn btn-sm md-fab m-b-sm indigo" id="filterbtn" formaction="<?php echo base_url(); ?>front/get_filter/<?php echo$device_id;?>"><i class="fa fa-bar-chart"></i></button>
<button type="submit"class="md-btn btn-sm md-fab m-b-sm indigo" id="filterbtn" formaction="<?php echo base_url(); ?>front/get_data/<?php echo$device_id;?>"><i class="fa  fa-th-list"></i></button>