我发现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 回答
imho没有必要检查请求方法,因为如果用户'GET'到页面你要显示注册视图...如果他们用户'POST'到页面并且验证失败你也想显示注册视图 . 当用户'POST'到页面并通过验证时,您不希望显示注册视图 .
imho这里是CodeIgniter中最优雅的方式:
顺便说一句,这就是我在config / routes.php中做的事情,使我的CI变得像RoR一样 . 请记住,您的routes.php只是一个普通的php文件,所以你可以根据请求方法设置一个开关来生成不同的路由 .