Перенаправление на контроллер, если запрос в модели возвращает пустой в Codeigniter 3

#php #codeigniter #redirect

#php #codeigniter #перенаправление

Вопрос:

что я хочу сделать, так это перенаправить пользователя на другой контроллер, если запрос в моей модели возвращает пустой.

У меня есть контроллер, подобный этому, передающий параметр URL в $ id, чтобы получить конкретного пользователя

 public function get_user($id)
{
  $data['user'] = $this->user_model->get_user_detail($id);
  $this->load->view('customer_detail',$data);
}  

И моя модель :

 public function get_user_detail($id)
{
  $query = $this->db->where('user_id', $id)->get('user');
    return $query->row();
}  

затем я передал результат своему представлению следующим образом:

 <?php echo $user->name;?>  

Это сработало просто отлично. URL от моего контроллера будет чем-то вроде mysite / user / get_user /7, а ‘7’ — это идентификатор. Но если я введу несуществующий идентификатор непосредственно в строке URL, например mysite /user / get_user / 99, это выдаст ошибку «Попытка получить свойство ‘name’ не-объекта», потому что в базе данных нет пользователя с идентификатором 99. Как перенаправить пользователя на другой контроллер, если из запроса не найдены данные?

Спасибо

Комментарии:

1. зачем другой контроллер? Я бы либо загрузил представление customer_detail, либо загрузил представление 404, если данные [‘user’] пусты

2. @vickel Ах, да, конечно. Я попытался проверить результат в модели, а затем перенаправить. Это не работает. Я должен выполнить проверку данных [‘user’] на контроллере и просто загрузить другое представление, если оно пустое. Это сработало. Спасибо.

Ответ №1:

Простой способ перенаправления.

 $q =  $this->db->query()->row();
 If($q==""){
   redirect('url/page');
  }
  

Ответ №2:

 public function get_user_detail($id)
{
  $query = $this->db->where('user_id', $id)->get('user');
    $query != "" ? redirect('actual-controller ($query)') : redirect('other-controller');
}
  

controller($query){ return $query->row(); //your view code for view here }

Ответ №3:

Спасибо @Vickel за указание. Я должен выполнить проверку на контроллере, которого нет в модели, и мне не нужно перенаправление. Я выполнял проверку модели и перенаправление.

 public function get_user($id)
{
  $data['user'] = $this->user_model->get_user_detail($id);
  if (!empty($data['user'])) {
  $this->load->view('customer_detail',$data);
  } else {
  $this->load->view('404');
  }
}