#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-адресах