Просто сконцентрируйтесь на своем примере «отладочный код», так как есть проблема с ним, и отладочный код важен для правильного решения.
Итак, это скорее "понимание кода отладки для отладки вашего кода" ответ.
Вы сказали, что читали руководство пользователя CI по этому вопросу.
Итак, у вас есть ...
$seg = $this->uri->segment(2, false);
if($seg != NULL) {
echo $seg; //this works when I pass login
}else{
$first_seg = false; // if I dont pass login, it doesn't not working.
}
Что вы говорите ... Если 2-го сегмента нет, установите для $ seg значение false.Если $ seg не равно NULL, выведите $ seg.В этом случае $ seg никогда не будет NULL.
Я игнорирую ваш $ first_seg, так как он колеблется на ветру, и я понятия не имею, для чего он использовался.Где это когда-либо устанавливается в True и т. Д.
Фактически ваш код превращается в
$seg = $this->uri->segment(2, false); // Override the default NULL to false
if($seg != NULL) {
echo $seg; // This will ALWAYS run as $seg is Never NULL
}
, который на самом деле сводится к ..
$seg = $this->uri->segment(2, false); // Override the default NULL to false
echo $seg;
Интересно, что вы не можетеотображать ложь с помощью эха.Он не будет ничего отображать на странице (пробел).Вы можете использовать echo $seg ? $seg: '0';
или что-то еще.SO, если $ seg истинно (не ложно), echo $ seg, иначе выведите 0, чтобы представить ложь.
Вы можете просто использовать ...
$seg = $this->uri->segment(2, 'Nothing');
echo $seg;
Или еще лучше
$seg = $this->uri->segment(2, 'index'); // No 2nd segment means default index method.
echo $seg;
Надеюсь, это поможет в будущем.
И убедитесь, что вы прочитали ответ Хавьера Ларроулета .