Обрабатывать форму входа в шапку с помощью CodeIgniter

0

Для всех моих "открытых" страниц/маршрутов, которыми я сталкиваюсь, я использую контроллер, который я создал, называемый Public_controller который расширяет CI_Controller. В настоящее время Public_controller представляет собой пустой файл с функцией только конструктора.

На моих маршрутах я определил Application_controller как мой контроллер по умолчанию. Это где маршруты, такие как mysite.com/about-us указывают на:

PHP

class Application_controller extends Public_Controller {

public function about() {
        $data['page_title'] = 'About';
        $data['page_description'] = '';
        $data['page_keywords'] = '';
        $data['main_content'] = 'public/about';

        $this->load->view('public/templates/default', $data);
    }
}

У меня есть форма входа в заголовок каждой публичной страницы. Я знаком с тем, как обрабатывать/обрабатывать формы в CI. То, с чем я борюсь, - это проверить это на глобальном уровне, а не на разовой странице.

Например, обычно я бы сделал это, если бы моя форма была в <body> моей страницы:

PHP

$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'Name', 'trim|required|xss_clean');

if ($this->form_validation->run() == FALSE) {
        $data['main_content'] = 'public/forms/my_form';
    } else {
        // Handle the form.
    }
}

$this->load->view('public/templates/default', $data);

Все отлично. Я, очевидно, не могу иметь такой тип синтаксиса для каждого метода контроллера. Пользователь может войти на любую страницу - поэтому мне нужно иметь возможность слушать/обрабатывать форму, если они входят в систему. В противном случае мне нужно показать страницу, которую запросил пользователь.

Может быть, мне нужен другой контроллер, который расширяет Public_controller?

Спасибо вам за ваши предложения.

  • 0
    Трудно понять, что вы хотите. Вы хотите, чтобы все контроллеры могли просматривать только зарегистрированные пользователи?
Теги:
codeigniter

1 ответ

1

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

Существует несколько способов сделать это, вот два:

Решение I/Ajax

1/Создайте контроллер, отвечающий за вызовы Ajax, и напишите свою функцию входа в систему

ajax.php

class Ajax extends CI_Controller 
{
    $email          = $this->input->post("mail_login"); 
    $password       = $this->input->post("pass_login");

    $user = $this->somemodel->get_user_by_mail_and_pass($email, $password);

    if($user)
    {
        //stuff if success
    }
    else
    {
        //Stuff if failed
    }
}

2/Создайте файл js, который будет загружен повсюду.

myjsfile.js (я полагаю, вы используете jQuery)

$("#theform").on("submit", function(event)
{
    event.preventDefault();
    var post_array =
    {
        "mail_login"    : $("#txt_mail_login").val(),
        "pass_login"    : $("#txt_pass_login").val()
    }

    $.ajaxSetup({async:false});
    $.post(baseUrl + "/Ajax/ajax_login", post_array,
        function(data)
        {
            //Stuff here (redirect, change form into user info....)
        });
)};

Вуаля!


II/"Классическая" форма отправить

В вашем заголовке, где форма входа в систему

<form method="post" action="<?= site_url("My_controller/my_login_function/" . $_ci_view); ?>">

Здесь мы предполагаем, что у вас есть функция с именем my_login_function, которая отвечает за ведение журнала. Эта функция находится в контроллере, здесь, my_controller (ужасное имя :)).

$ _ci_view - это var, который содержит имя текущего представления. Мы будем использовать его для перенаправления пользователя, где он был до отправки формы.

Например, если ваш пользователь загружает дом просмотра, вы получите что-то вроде этого в своей форме:

<form method="post" action="http://www.example.com/My_controller/my_login_function/home">

My_controller.php

class My_Controller extends CI_Controller
{
    public function user_login($view_name)
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('name', 'Name', 'trim|required|xss_clean');

        if ($this->form_validation->run() == FALSE) 
        {
            //Your stuff here

            $this->load->view($view_name);
        } 
        else 
        {
            //Your stuff here

            $this->load->view($view_name);
        }


        $this->load->view('public/templates/default', $data);

    }
}

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

  • 0
    Я хотел бы дать более подробную информацию, но мои знания английского очень ограничены;)
  • 0
    Вы правы - я бы хотел, чтобы пользователь мог войти на любую страницу. Считаете ли вы, что передача информации для входа в систему (un / pw) с помощью ajax-вызова достаточно "безопасна"?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню