CodeIgniter войти на всех страницах

Я очень новичок в CI модель MVC.

У меня есть простая страница, которая состоит из 3 просмотров. Верхний колонтитул, содержание и нижний колонтитул. Содержание будет уникальным для всего сайта, но верхний и нижний колонтитулы будут одинаковыми, независимо от того, на какой странице.

У меня в шапке есть форма для входа. Таким образом, будет форма входа по всему сайту. так как он появляется на каждой странице, которая имеет различные модели:

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

Может быть, другой пример:

Если не понятно, попробую другой пример. Предположим, у меня есть сайт. В этом я загружаю представление, которое является нижним колонтитулом на всех моих страницах. и нижний колонтитул содержит форму. Теперь, когда я публикую данные с помощью этой формы, куда эти данные должны идти?

Покажите это, перейдите к выделенному файлу PHP, который обрабатывает все сообщения из этой формы, или он должен перейти к контроллеру текущей страницы?

Надеюсь, мне было ясно. Я снова начал использовать CI и MVC день назад. Было бы хорошо, если бы вы могли вести меня.

2 ответа

Решение

Когда я публикую данные с помощью этой формы, куда эти данные должны идти?

Вы не должны писать логику на каждой странице (контроллере). Что вы должны сделать, это создать отдельный контроллер (например, Accounts) для управления регистрацией пользователей.

Форма входа должна опубликовать данные accounts/login URL. но чтобы вернуться на предыдущую страницу, мы должны сохранить текущий URL в сеансе как referer,

Для этого просто храните uri_string(); в сессии на каждой странице вам нужно.

$this->session->set_userdata(array(
    'referer' => $this->uri->uri_string()
));

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

Пример ниже показывает, как достичь цели:

class Accounts extends CI_Controller {

    public function login()
    {
        $config = array(
            // Write your validation rules here
        );

        $this->load->library('form_validation');
        $this->form_validation->set_rules($config);

        // Check whether form is submitted
        if (isset($_POST['submit'])) {

            if ($this->form_validation->run() == FALSE) {
                $data['login_errors'] = validation_errors();
                // Store validation errors in session
                // to display on every page needed
                $this->session->set_userdata($data);
            } else {

                // Login process
                // Set user detail in session

                // Redirect to previous page after login
                if ($referer = $this->session->userdata('referer')) {
                    $this->session->unset_userdata('referer');
                } else {
                    $referer='';
                }

                redirect(base_url().$referer);  
            }

        }
    }

    public function logout()
    {
        // Destroy the session
        $this->session->sess_destroy();
        redirect(base_url());
    }
}
  1. Создать модель с глобальной функцией
  2. Поместите функцию в конфиге autoload.php в разделе "Модели"
  3. Вы можете вызвать эту модель из любой точки мира, не загружая ее.
Другие вопросы по тегам