Я пробовал много способов решить эту проблему, но никто не работает.Codeigniter игнорирует средний сегмент из нескольких сегментов
Предположим, у меня есть класс:
class MyTestClass{
function testPrint($a = '', $b = '', $c = '')
{
echo '1: ' . $a . ', 2: ' . $b . ', 3: ' . $c;
}
}
и если доступ к этой функции, используя этот адрес http://localhost/ci/index.php/myTestClass/testPrint/a/b/c
вы увидите 1: a, 2: b, 3: c
в качестве выхода, это нормально.
Но если я назначу $ Ь в пустую строку, URL-адрес изменится на http://localhost/ci/index.php/myTestClass/testPrint/a//c
Выход изменится на 1: a, 2: c, 3:
кажется CI игнорирует недостающий параметр.
Вопрос в том, как предотвратить игнорирование CI отсутствующего параметра в середине uri?
Мой ожидается выход для только теперь URL-адрес является 1: a, 2: , 3: c
Btw, я пытался использовать $this->uri->segment(n)
, чтобы зафиксировать положение параметра, но он не работает.
Я пытался обновить routes.php, добавив:
$route['myTestClass/(:any)/(:any)/(:any)/(:any)'] = "myTestClass/$1/$2/$3/$4";
, но это ничего не меняет.
Любая идея?
Я не уверен, что это проблема CI, я бы предположил браузер и/или веб-сервер. Если я введу URL http://stackoverflow.com//questions//11310801//codeigniter-ignores-the-middle-segment-from-multiple-segments, я увижу эту страницу. Вероятно, что CI «видит» - это «http: // localhost/ci/index.php/myTestClass/testPrint/a/c' – danneth
При создании URL-адреса вы не можете установить значение по умолчанию для' $ b' (или других отсутствующих params), скажем 0 или слово 'null'? Маршруты имеют наибольший смысл, но есть множество случаев, чтобы удовлетворить! – cchana
@cchana Это не проблема с CI, как ваш браузер интерпретирует ссылки. Возможно, вы захотите рассмотреть вопрос о том, как установить код на что-то вроде/0/c, что у вас есть некоторый тип ввода для «b». Вы можете выполнить оператор if для 'if ($ b == 0) $ b = '';', если вам действительно нужно, чтобы он был пустым. –