Маршрутизация с помощью CodeIgniter, получение 404 с правильными $ routes

#php #codeigniter #codeigniter-routing

#php #codeigniter #codeigniter-маршрутизация

Вопрос:

Используя CodeIgniter, я получаю странное поведение в своем коде. Я хочу, чтобы в моей базе данных был своего рода список пользователей, и когда я ввожу идентификатор данного пользователя, появляется страница со всей информацией, которая у нас есть об этом человеке в базе данных.

Просто простая вещь. Я преуспел с помощью официального руководства по новостям, и это вообще не работает с этим!

Я написал унаследованный от контроллера класс с именем Person, с методом viewPersonById, точно так же :

 class Person extends CI_Controller{

      public function __construct()
      {
      parent::__construct();
      $this->load->model('Person_Model');
}

public function index()
{

}

public function viewPersonById($parId){
    $data['person'] = $this->Person_Model->get($parId);

    $data['title'] = 'Person information';

    $this->load->view('templates/header', $data);
    $this->load->view('people/view', $data);
    $this->load->view('templates/footer');
} 
  

Мой routes.php написано так :

 $route['people/(:any)'] = 'Person/viewPersonById/$1';

$route['news/create'] = 'news/create';
$route['news/modify/(:any)'] = 'news/modify/$1';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';

$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view'; 
  

И все, что я получаю, это 404 при вводе http://127.0.0.1:8888/ci/index.php/people/1 в моем браузере. Что не так в моем коде? Я этого не вижу.

Есть идеи? Спасибо и извините за мой плохой английский.

Редактировать :

Хорошо, ребята, я выяснил, что было не так. Я чувствую себя самым большим ослом, потому что имена моих файлов были странными, как «person.controler.php «и «person.model.php «. Имя вашего контроллера и то, что вы вводите в маршруты.php должен точно соответствовать.

Итак, мне просто пришлось переименовать person.controler.php для person.php и person.model.php для person_model.php таким образом, модель может быть загружена в контроллер. CI использует имена файлов, чтобы увидеть, что он должен загрузить. Будьте осторожны с этим.

Ответ №1:

Если имя файла вашего контроллера, если person.php , тогда вам следует изменить:

$route['people/(:any)'] = 'Person/viewPersonById/$1';

Для

$route['people/(:any)'] = 'person/viewPersonById/$1';

строчная буква p лично.

PS: Попробуйте открыть http://127.0.0.1:8888/ci/index.php/Person/viewPersonById/1 , вы узнаете проблему

Комментарии:

1. Вот и все, я нашел ответ за несколько минут до тебя, но спасибо, приятель!

Ответ №2:

Мне кажется, что ваш .htaccess не настроен и не читается.

Не все конфигурации сервера по умолчанию будут проходить по пути, пока не найдут ваш index.php скрипт.

Комментарии:

1. Что ж, спасибо. Но о каком .htaccess вы говорите? Мне нужно создать один внутри корневой папки? Значит, маршрутизация в CI не работает по умолчанию?

2. @turbodoom, это действительно не имеет ничего общего с Code Igniter. Ваш веб-сервер не попадет index.php если только это не было указано на это. Вы можете сделать это либо в своей конфигурации Apache, либо в .htaccess. Если вы размещаете на IIS, это проще всего с IIS 7, и вам нужно будет настроить web.config.

Ответ №3:

Напрямую не связано, но вам следует взглянуть на Руководство по стилю CodeIgniter

Имена методов должны быть в нижнем регистре, а слова разделяться символами подчеркивания (‘_’). Вам это может не понравиться, и вы сочтете это занозой в — сами знаете где -, но поверьте мне, придерживаться стандартов всегда лучшая идея, плюс это выглядит красиво и согласуется со сторонними библиотеками / плагинами / помощниками.

Кроме того, вы не хотите настраивать каждый метод каждого контроллера. И вы также не хотите, чтобы символы верхнего регистра в ваших URL-адресах