Кодовый сегмент URI, когда ничего не прошло - PullRequest
0 голосов
/ 30 апреля 2019

Я работаю над контроллером, и я хотел бы убедиться, что есть второй сегмент URI. Когда я пишу, например, www.example.com/controller/login, он работает, возвращая второй сегмент, который является «логином». НО, когда я не пропускаю второй сегмент, просто www.example.com/controller ничего не возвращает. Я пытался проверить, является ли он нулевым или ложным, все тот же, не работает. Кто-нибудь может мне помочь, пожалуйста? Кажется, что если я не передам функцию или метод после контроллера, я ничего не получу.

        $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 not working.
        }

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Просто сконцентрируйтесь на своем примере «отладочный код», так как есть проблема с ним, и отладочный код важен для правильного решения.

Итак, это скорее "понимание кода отладки для отладки вашего кода" ответ.

Вы сказали, что читали руководство пользователя 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;

Надеюсь, это поможет в будущем.

И убедитесь, что вы прочитали ответ Хавьера Ларроулета .

1 голос
/ 01 мая 2019

вы неправильно понимаете, как URI отображаются в codeigniter.

В Codeigniter:

example.com/segment1/segment2/segment3/..../segmentN

отображаются так: сегмент1 = контроллер

сегмент2 = метод

сегмент3 = параметр 1

сегмент4 = параметр 2

...

сегментN = параметр N

, если сегмент 2 отсутствует, вы не указываете метод, поэтому ничего не произойдет.

По умолчанию, если метод не указан, CI попытается использовать метод index().Поэтому вы можете захотеть обработать отсутствующий segment(2) в методе index или в конструкторе контроллера.В противном случае вы не сможете обработать запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...