我发现CodeIgniter表单验证可以通过load-> view方法显示错误消息,如果使用"重定向",则会丢失字段错误消息。
目前,我使用一个功能显示表单页面,使用另一个功能处理表单发布。
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"
恕我直言,没有必要检查请求方法,因为如果用户"获取"到页面要显示注册视图...如果他们使用" POST"到页面并通过验证失败,那么您也要显示注册 视图。 当用户" POST"到页面并通过验证时,您只不想显示注册视图。
恕我直言,这是在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;
}
看起来不错 哈德特这样想。