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

qic*_*ren 5 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.

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

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

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

PK.*_*PK. 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');
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这就是我在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;
}
Run Code Online (Sandbox Code Playgroud)