我发现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"
答案 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>