Codeigniter: Самый простой способ сделать пользовательские данные, взятые из базы данных, доступными методами в любом контроллере или методе - PullRequest
0 голосов
/ 07 января 2011

Я уже задавал этот вопрос, но таким образом, что это сбивает с толку людей.

Итак, чего я хочу добиться, так это:

У меня есть метод get_user_by_email (), и он используется длязахватить строку из таблицы базы данных пользователя, который вышел из системы.

public function get_user_by_email($email_post = '') //post email grabbed from reset password controller
{
if (empty($email_post))
{
    return FALSE;
}
$query = $this->db->query("SELECT * FROM users WHERE email = '$email_post'");
$query->row();

$row = $query->row();
$user_id = $row->{'id'};
$email = $row->{'email'};
$first_name = $row->{'first_name'};
$last_name = $row->{'last_name'};

//e.g. example below is just an example and obviously wouldn't work but the variables are what I use in my mysql querys ...eg. WHERE email = $email etc

return $email;
return $first_name;
return $last_name;
return $user_id;

}

Приведенный выше код не работает, и я знаю это, но я приводил пример того, что я делаю с данными, которые яполучить из строки.

Я просто хочу кое-что, как сделать это доступным для моего контроллера reset_password через out, затем мой контроллер verify_reset_code и, наконец, мой контроллер create_new_password.

Как бы я это сделал?

НОВАЯ МОДЕЛЬ

class Get_user_by_email extends CI_Model {
    public function __construct() {
        parent::Ci_Model();

    }

        public function process($email_post = '') //post email grabbed from reset password controller
        {
        if (empty($email_post))
        {
            return FALSE;
        }
        return $this->db->query("SELECT * FROM users WHERE email = '$email_post'");

        }

}

НОВЫЙ КОНТРОЛЛЕР

<?php

class Account extends FH_Controller {
    public function __construct() {
        parent::__construct();

        $this->load->model('get_user_by_email');


    }

    public function reset_password()
    {
        $this->load->view('reset_password');
        if ($this->get_user_by_email->process($this->input->post('e-mail')))
        {
        $query = $this->get_user_by_email->process();
        print_r($query);



        }
    }

    public function confirm_reset_code()
    {
        $this->load->view('confirm_reset_code');
    }

    public function create_new_password()
    {
        $this->load->view('create_new_password');
    }
}

Я ввожу электронную почту, и браузер ничего не возвращает.

Ответы [ 4 ]

1 голос
/ 07 января 2011

Я только что написал подробное сообщение в блоге на эту конкретную тему, в котором рассказывается, как создать ваши «защищенные» контроллеры и в то же время определить глобальную переменную $the_user, которая доступна как на всех защищенных контроллерах. и просмотры.

Я постараюсь составить резюме для этого ответа, но до тех пор, извлекайте мой пост .

0 голосов
/ 07 января 2011

Самый простой способ - сохранить эту информацию в файле cookie / сеансе. Обычно я храню электронную почту, имя и идентификатор пользователя. Конечно же, я шифрую информацию, хранящуюся в куки / сессии:)

0 голосов
/ 07 января 2011

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

Вместо $row = $query->row(); используйте $row = $query->row_array();, а затем верните этот массив.

Эта функция должна находиться внутри файла модели, который можно загрузить с любого контроллера.

РЕДАКТИРОВАТЬ: Некоторые изменения для вашего нового кода:

  1. parent::Ci_Model(); должно быть parent::__construct(); (не смешивайте конструкторы php5 и php5)
  2. Вам нужно позвонить row() или row_array() на $query, чтобы получить результаты. Я предлагаю вам не возвращаться $query.
  3. $this->get_user_by_email->process(); должно быть $this->Get_user_by_email->process(); (модели начинаются с заглавной буквы)
0 голосов
/ 07 января 2011

Добавьте функцию в модель , тогда вы сможете загружать модель в разные контроллеры, когда вам это нужно. Пожалуйста, прочитайте документацию.


* Пример 1006 *

class User_model extends Model {

    function User_model()
    {
        parent::Model();
    }

    function get_user_by_email($email)
    {
     .....
    }
}

Сохраните это в application / models / user_model.php, затем в любой из ваших контроллеров вы можете позвонить:

$this->load->model('user_model');
$user_data = $this->user_model->get_user_by_email('me@example.com');

Тогда играйте с пользовательскими данными, как вам нравится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...