【问题标题】:CodeIgniter Route found but gives 404找到 CodeIgniter Route 但给出 404
【发布时间】:2018-05-11 03:55:08
【问题描述】:

我已经与 codeigniter 路线斗争了好几天。它严重阻碍了我的工作效率。因此,非常感谢您提供任何帮助。

我有一个登录表单:

  • 如果登录错误重定向 -> 页面失败
  • 如果登录正确重定向 -> 欢迎

我正在使用 codeigniter 路由调试器脚本来检查和调试我的路由。

当我检查我的路由日志时,会显示以下内容,以确保登录尝试正确。

DEBUG - 2018-05-11 03:40:10 --> 客户端发送:用户/欢迎

DEBUG - 2018-05-11 03:40:10 --> 找到路由:users/welcome --> users/welcome

DEBUG - 2018-05-11 03:40:10 --> 重定向到:users/welcome -->users/welcome

users/welcome DEBUG - 2018-05-11 03:40:10 --> 全球 POST、GET 和

COOKIE 数据已清理 ERROR - 2018-05-11 03:40:10 --> 404 Page Not

如您所见,找到了路由,然后它重定向到路由,但不知何故导致找不到 404 页面。

但是我的视图中显然有一个欢迎页面,如下图所示:

我剥离了一切,并试图让我的路线尽可能简单。 config/routes.php 内容如下。

$route['users']= 'users';
$route['users/index'] = 'users/index';
$route['users/login'] ='users/login';
$route['users/welcome'] ='users/welcome';
$route['users/failed'] ='users/failed';

$route['(:any)'] = 'pages/index/$1';
$route['default_controller'] = 'pages/index';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

页面 URL 如下:http://mysite/users/welcome = 404 错误,如上所述。

任何帮助表示赞赏。

附加信息:控制器用户()

公共函数登录(){ $data['title'] = '登录';

$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');

if($this->form_validation->run() === FALSE){
    $this->load->view('templates/header');
    $this->load->view('users/login', $data);
    $this->load->view('templates/footer');
} else {

    // Get username
   echo $username = $this->input->post('username');
    // disabled encryption for testing
   echo $password = $this->input->post('password');

    // Login user
    $user_id = $this->users_model->login($username, $password);

    if($user_id){
        // Create session
        $user_data = array(
            'userID' => $user_id,
            'username' => $username,
            'logged_in' => true
        );

        $this->session->set_userdata($user_data);

        // Set message
        $this->session->set_flashdata('user_loggedin', 'You are now logged in');

            redirect('users/welcome');
    } else {
        // Set message
        $this->session->set_flashdata('login_failed', 'Login is invalid');
            redirect('users/failed');

    }
}

【问题讨论】:

  • 你检查你的$user_id变量了吗? var_dump($user_id)
  • @SalimIbrogimov 好的,给我一分钟的时间。并报告回来。但这与路线有什么关系呢?谢谢
  • 调用视图的用户类中的“欢迎”和“失败”方法在哪里?
  • @SalimIbrogimov 我添加了 var_dump($user_id) 输入了正确的凭据并登录。但我随后被重定向到:http://mysite/users/welcome 然后是 404 页面,vardump 没有任何显示。但是我在控制器中取出重定向以成功登录。 $_user_id 在登录页面上正确显示(因为我删除了重定向)我也做了$var_dump($_SESSION) 并且所有信息都正确显示。希望这是有道理的。感谢您的帮助
  • 我正在添加答案,请稍等。

标签: php codeigniter


【解决方案1】:

每条路由都映射到一个控制器,而不是一个视图。

当路由专门映射到控制器类和方法时,您不需要定义路由。 IE:http://website.com/users/login“神奇地”映射到Users控制器login方法。

您只需要在获得创意时定义路线。

这是您的用户类(控制器)的缩写

路线

// You don't need these for your current usage
$route['users']= 'users';
$route['users/index'] = 'users/index';
$route['users/login'] ='users/login';
$route['users/welcome'] ='users/welcome';
$route['users/failed'] ='users/failed';

// keep these below.
$route['(:any)'] = 'pages/index/$1'; //<-- this will give you problems probably
$route['default_controller'] = 'pages/index';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

作为关于路由的说明。如果您想使用example.com/login,那么您可以将路由映射到控制器/方法:$route['login'] ='users/login';

用户控制器

class Users extends CI_Controller
{

    // routes to example.com/users/
    public function index() 
    {
       redirect('users/login');
    }     

     // routes to example.com/users/login
     public function login() {
         $data['title'] = 'Sign In';

         $this->form_validation->set_rules('username', 'Username', 'required');
         $this->form_validation->set_rules('password', 'Password', 'required');

         if($this->form_validation->run() === FALSE){
             $this->load->view('templates/header');
             $this->load->view('users/login', $data);
             $this->load->view('templates/footer');
         } else {

             // Get username
             echo $username = $this->input->post('username');
             // disabled encryption for testing
             echo $password = $this->input->post('password');

             // Login user
             $user_id = $this->users_model->login($username, $password);

             if($user_id){
                 // Create session
                 $user_data = array(
                     'userID' => $user_id,
                     'username' => $username,
                     'logged_in' => true
                 );

                 $this->session->set_userdata($user_data);

                 // Set message
                 $this->session->set_flashdata('user_loggedin', 'You are now logged in');

                 redirect('users/welcome');
               } else {
                   // Set message
                   $this->session->set_flashdata('login_failed', 'Login is invalid');
                   redirect('users/failed');

                }
         }
    }

    // routes to example.com/users/welcome
    public function welcome() {
        $this->load->view('users/welcome');
    }

    // routes to example.com/users/failed
    public function failed() {
       $this->load->view('users/failed');
    }

}

【讨论】:

  • 非常感谢。快速愚蠢的问题:所以我创建了方法,然后将登录代码放在 USER() 控制器中的方法下面?
  • 你介意给我一个例子,说明这个控制器的路由应该是什么样子的。非常感谢
  • 您的登录代码将在登录方法中。你真的不需要做任何事情的路线......给我几分钟,我会扩大我的答案。
  • @TimothyCoetzee 好的,看看,我想我涵盖了所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2011-04-14
  • 1970-01-01
  • 2013-12-28
  • 2013-08-14
  • 2016-06-23
  • 1970-01-01
相关资源
最近更新 更多