CodeIgniter Route найден, но дает 404 - PullRequest
0 голосов
/ 11 мая 2018

Я несколько дней боролся с маршрутами Codeigniter.и это серьезно сдерживало мою производительность.Таким образом, любая помощь здесь будет принята с благодарностью.

У меня есть форма для входа:

  • если вход в систему неверный перенаправить -> ошибка страницы
  • если вход в систему правильный перенаправление-> welcome

Я использую сценарий отладчика маршрута 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

пользователи / добро пожаловать DEBUG - 2018-05-11 03:40:10 -> Глобальные данные POST, GET и

COOKIE санированы ОШИБКА - 2018-05-11 03:40:10 -> Страница 404 Не

Как вы можете видеть, маршрут найден, а затем он перенаправляется на маршрут, НО, так или иначе, это приводит к тому, что страница 404 не найдена.

Однако у меня явно есть страница приветствия в моих представлениях, как видно на изображении ниже:

enter image description here

Я удалил все и попыталсясделать мои маршруты максимально простыми.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 ошибка, как описано выше.

Любая помощь приветствуется.

Дополнительная информация: пользователи контроллера ()

открытая функция login () {$ 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');

    }
}

1 Ответ

0 голосов
/ 11 мая 2018

Каждый маршрут отображается на контроллер, а не на представление.

Вам не нужно определять свои маршруты, когда они отображаются конкретно на класс и метод контроллера. IE: http://website.com/users/login "магически" сопоставляется с Users Controller login method.

Вам нужно только определять маршруты, когда вы проявляете творческий подход.

Итак, вот краткость вашего класса Users (контроллер)

Маршруты

// 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');
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...