2012-07-03 5 views
0

Я пробовал много способов решить эту проблему, но никто не работает.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";, но это ничего не меняет.

Любая идея?

+1

Я не уверен, что это проблема 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

+0

При создании URL-адреса вы не можете установить значение по умолчанию для' $ b' (или других отсутствующих params), скажем 0 или слово 'null'? Маршруты имеют наибольший смысл, но есть множество случаев, чтобы удовлетворить! – cchana

+0

@cchana Это не проблема с CI, как ваш браузер интерпретирует ссылки. Возможно, вы захотите рассмотреть вопрос о том, как установить код на что-то вроде/0/c, что у вас есть некоторый тип ввода для «b». Вы можете выполнить оператор if для 'if ($ b == 0) $ b = '';', если вам действительно нужно, чтобы он был пустым. –

ответ

0

Я не уверен, что это возможно в вашем случае, но то, что я хотел бы сделать, это использовать короткую фиктивную строку (xyz в этом примере), чтобы не иметь дело с / / и затем отфильтровывать ее.

http://localhost/ci/index.php/myTestClass/testPrint/a/xyz/c

if ($b == 'xyz') 
{ 
    $b = '' 
} 

Если это возможно, попробуйте POST-ки переменных вместо сегментов URI. Это упростит ситуацию. Надеюсь, это поможет.

Update:

Поскольку вы не можете, как насчет enabling query strings?

+0

Спасибо. Но это не сработает, если «xyz» - это пользовательское значение ввода. На самом деле URL-адрес вызывается мобильными устройствами, а не веб-страницей, поэтому я не могу использовать POST. – qkzhu

+0

Хммм, включите строки запроса, новичок для меня, позвольте мне сначала попробовать. Благодаря:) – qkzhu

Смежные вопросы