Codeigniter 3 Маршрута и 404 Страницы - PullRequest
2 голосов
/ 11 марта 2019

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

Мое веб-приложение имеет административную область и структура URL выглядит следующим образом:

example.com/admin/view/form/123

Мой Admin контроллер выглядит следующим образом;

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Admin extends CI_Controller {

    public function index()
    {
        $data = array(
            'title'         =>  'Admin Page'
        );
        $this->load->view('admin/index', $data);
    }

    public function view() {
        $form_submission_id = $this->uri->segment(4);
        $records = $this->Admin_model->getDetails($form_submission_id);
        $data = array(
            'title'         =>  'Form Details',
            'records'       =>  $records
        );
        $this->load->view('admin/view/index', $data);
    }

}

У меня нет пользовательских настроек маршрутов.

Когда я захожу по следующему URL, я вижу страницу исоответствующие данные успешно;

example.com/admin/view/form/123

Но , когда я изменяю сегмент URL /form/ на что-то случайное, как показано ниже, я могу все еще увидеть правильные данные;

example.com/admin/view/foo/123
  • Почему это?
  • Я ожидал увидеть страницу 404?
  • Что мне нужно изменить, чтобы добиться того, чего я хочу?

Возможно, я неправильно понимаюлогика и должны ли мои контроллеры / маршруты настраиваться иначе?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Ответ Рохита Миттала хорош, а также,Вы можете изменить функцию просмотра в контроллере администратора, например:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Admin extends CI_Controller {

public function view($form = null,$form_submission_id = null) {
    if($form == "form" && $form_submission_id){
    $records = $this->Admin_model->getDetails($form_submission_id);
    $data = array(
        'title'         =>  'Form Details',
        'records'       =>  $records
    );
    $this->load->view('admin/view/index', $data);
 }
}
1 голос
/ 11 марта 2019

Codeigiter URL имеет структуру domain/controllerName/actionName/param1/param2 и так далее. В вашем коде URL example.com/admin/view/form/123 admin является контроллером, view является именем действия, а form и 123 являются параметрами, которые вы передали с помощью метода get. Вы можете получить доступ к этим параметрам, например, $this->uri->segment(3).

Таким образом в вашем коде:

  1. Не будет отображаться никакой ошибки, поскольку ваша функция даже не использует третий сегмент URI.
  2. Не будет отображаться страница 404, так как найден правильный контроллер и действие.
  3. Для достижения функциональности, связанной с доменом, необходимо либо изменить код функции соответствующим образом, либо использовать для этого маршруты.

Надеюсь, это поможет вам уточнить этот код.

...