Я работаю над системой опроса для своей компании, и у меня есть настройка в системе, так что есть два способа взять опрос.
1) Новый опросник не имеет предварительной информации
2) Опрос уже отправлен, и была создана сессия.
В случае одного я хотел бы, чтобы мой URL выглядел так:
mydomain.com/SurveySystem/index.php/survey/$surveyID
($ surveyID – целое число опроса, которое требуется)
Во втором случае мы создадим ссылку для тестирующего. Я хотел бы, чтобы URL-адрес выглядел так:
mydomain.com/SurveySystem/index.php/survey/$surveySessionID/$guestID
В моем классе Survey у меня есть настройка следующим образом:
function index () {
$segments = $this->uri->total_segments(); if($segments == 1){ echo "no surveyID set"; return; } if($segments == 2){ $this->take_survey($this->uri->segment(2)); } if($segments == 3){ $this->survey_session($this->uri->segment(3), $this->uri->segment(4)); }
}
Когда информация не передается, это очень хорошо. Но если я попытаюсь поместить целое число, где surveyID, он думает, что я загружаю метод в контроллер.
Спасибо вам за помощь!
Используйте маршрутизацию URI для переопределения сопоставления контроллера / функции / аргументов по умолчанию.
Пример: в вашем application/config/routes.php
:
$route['survey/:num'] = "survey/take_suvey";
Бонус: вы также можете удалить index.php/
part, см. Удаление файла index.php .
Мой вопрос: с недружественным URL-адресом, почему вам все равно, как оно выглядит? Это не семантично с точки зрения пользователя. Да, вы должны удалить index.php. Связываясь с переписыванием URL, все это должно быть уменьшено:
mydomain.com/SurveySystem/index.php/survey/????
в
mydomain.com/survey/
И ваши методы класса CI могут быть уменьшены до «take» или «submit» и последующего «обзора».
Сеансы должны управляться с использованием куки-файлов или класса сеанса CI. Если вам нужно отслеживать состояние в URI, объедините свой «определенный сеанс» для опроса и «guestID» в один сегмент с кодировкой base64.
Наконец, используя маршрут, как было предложено, у вашего приложения не будет возможности узнать, какой идентификатор опроса нужно загрузить. Ему нужно было бы захватить «: num» и подать его на take_survey:
$route['survey/(:num)'] = "survey/take_survey/$1";
Если вы принимаете числовые идентификаторы в качестве первого сегмента после / опроса, вам нужен еще один маршрут, расположенный после этого, чтобы обрабатывать случай, когда этот сегмент является идентификатором сеанса:
$route['survey/(:num)/(:num)'] = "survey/session_manager/$1/$2";
Где $ 1 и $ 2 – идентификатор сеанса и идентификатор гостя, соответственно. Лично я бы сказал, что это плохая форма. Семантический смысл ваших сегментов ломается: становится трудно определить, что означает этот первый числовой сегмент (это идентификатор опроса или идентификатор сеанса), если вы не можете всегда гарантировать, что эти маршруты на месте.