У меня есть «пользователь» контроллера в моем приложении codeigniter. Этот контроллер имеет функцию logged_user_only()
:
public function logged_user_only() { $is_logged = $this -> is_logged(); if( $is_logged === FALSE) { redirect('user/login_form'); } }
Поскольку эта функция вызывает другую функцию is_logged()
, которая просто проверяет, установлен ли сеанс, если да, то он возвращает true, else возвращает false.
Теперь, если я поместил эту функцию в начале любой функции внутри одного и того же контроллера, он проверит, не был ли пользователь зарегистрирован, он будет перенаправлен на login_form
противном случае продолжить. Это прекрасно работает. Например,
public function show_home() { $this -> logged_user_only(); $this->load->view('show_home_view'); }
Теперь я хотел бы вызвать эту logged_user_only()
в функции другого контроллера, чтобы проверить, зарегистрирован ли пользователь или нет?
PS. Если это невозможно сделать или не рекомендуется, где я должен помещать эту функцию для доступа к нескольким контроллерам? Благодарю.
Почему бы не расширить контроллеры, чтобы метод входа находился в пределах MY контроллера (в основной папке вашего приложения), и все остальные контроллеры расширяют это. Например, вы могли бы:
class MY_Controller extends CI_Controller { public function is_logged() { //Your code here } }
и ваши основные контроллеры могли бы затем расширить его следующим образом:
class Home_Controller extends MY_Controller { public function show_home() { if (!$this->is_logged()) { return false; } } }
Для получения дополнительной информации посетите: Создание основных системных классов
Вызов контроллера из другого невозможно с помощью CI и не рекомендуется.
Либо переместите свой logged_user_only
в помощника, либо даже лучше основного контроллера, из которого вы распространяете все ваши контроллеры ( MY_Controller
), см. MY_Controller
просто загрузите контроллер пользователя в качестве библиотеки в контроллере
function __construct(){ parent::__construct(); $this->load->library('../controllers/user');
} теперь вызывайте эту функцию пользовательского контроллера любым, где в вашем контроллере,
$this->user->logged_user_only();
Вход в систему для входа в контроллер
$data =array('username' => $this->input->post('username'), 'password' => $this->input >post('password')) $query = $this->db->get_where('usertable',$data) if ($query->num_rows() == 1) { $data = array( 'username' => $this->input->post('username'), 'logged_in' => TRUE, 'role' => "user"); $this->session->set_userdata($data); redirect('home'); }
Функция Construct в пользователе контроллера
if ($this->session->userdata('logged_in') == TRUE && $this->session->userdata('role') == "user") {} else {redirect('home');}