首页 文章

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

提问于
浏览
5

我发现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 .

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

在Rails中,我不能使用如下配置的路由:

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

2 回答

  • -2

    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;
    }
    
  • 5
    <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>
    

相关问题