Вызов функции контроллера в другом контроллере в CodeIgniter - PullRequest
10 голосов
/ 11 июля 2011

У меня есть контроллер пользователя в моем приложении 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, иначе возвращает false.

Теперь, если я помещу эту функцию в начале какой-либо функции в том же контроллере, она проверит, не зарегистрирован ли пользователь, перенаправит ее на login_form, иначе продолжит. Это отлично работает. Например,

public function show_home()
    {
        $this -> logged_user_only();
        $this->load->view('show_home_view');
    }

Теперь я хотел бы вызвать эту функцию logged_user_only() в функции другого контроллера, чтобы проверить, вошел ли пользователь в систему или нет?

PS. Если это невозможно или не рекомендуется, где я должен разместить эту функцию для доступа к нескольким контроллерам? Спасибо.

Ответы [ 4 ]

15 голосов
/ 11 июля 2011

Почему бы не расширить контроллеры, чтобы метод входа в систему находился в контроллере 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;
         }
    }
}

Для получения дополнительной информации посетите: Создание классов базовой системы

Новая ссылка здесь: https://www.codeigniter.com/user_guide/general/core_classes.html?highlight=core%20classes

8 голосов
/ 11 июля 2011

Вызов контроллера из другого устройства невозможен с помощью CI и не рекомендуется.

Либо переместите logged_user_only в помощник, либо, что еще лучше, в контроллер ядра, из которого вы расширяете все свои контроллеры (MY_Controller)) см http://codeigniter.com/wiki/MY_Controller_-_how_to_extend_the_CI_Controller/

5 голосов
/ 04 апреля 2017

просто загрузите пользовательский контроллер как библиотеку в свой контроллер

function __construct(){
parent::__construct();
$this->load->library('../controllers/user');

} Теперь вызовите эту функцию пользовательского контроллера в любом месте вашего контроллера,

$this->user->logged_user_only();
0 голосов
/ 13 июня 2013

Вход в функцию в контроллере Вход в систему

$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 in Controller user

if ($this->session->userdata('logged_in') == TRUE && $this->session->userdata('role') == "user") {} else {redirect('home');}
...