Вызов функции контроллера в другом контроллере в CodeIgniter
У меня есть "пользователь" контроллера в моем приложении 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. Если это невозможно сделать или не рекомендуется, где я должен помещать эту функцию для доступа к нескольким контроллерам? Спасибо.
Ответы
Ответ 1
Почему бы не расширить контроллеры, чтобы метод входа был в МОЕМ контроллере (в основной папке вашего приложения), а все остальные контроллеры расширяли это. Например, вы можете иметь:
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;
}
}
}
Для получения дополнительной информации посетите: Создание базовых системных классов
Новая ссылка здесь:https://www.codeigniter.com/user_guide/general/core_classes.html?highlight=core%20classes
Ответ 2
Вызов контроллера из другого невозможно с помощью CI и не рекомендуется.
Либо переместите ваш logged_user_only
в помощника, либо даже лучше основного контроллера, из которого вы расширяете все ваши контроллеры (MY_Controller
), см. http://codeigniter.com/wiki/MY_Controller_-_how_to_extend_the_CI_Controller/
Ответ 3
просто загрузите пользовательский контроллер как библиотеку с вашего контроллера
function __construct(){
parent::__construct();
$this->load->library('../controllers/user');
}
Теперь вызывайте эту функцию пользовательского контроллера в любом месте вашего контроллера,
$this->user->logged_user_only();
Ответ 4
Вход в систему для входа в контроллер
$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');
}
Конструкция функции в пользователе контроллера
if ($this->session->userdata('logged_in') == TRUE && $this->session->userdata('role') == "user") {} else {redirect('home');}