Как заменить кнопку «Войти» именем пользователя в CodeIgniter - PullRequest
1 голос
/ 14 июля 2010

Я пытаюсь создать универсальный заголовок для сайта, построенного на CodeIgniter, и у меня возникают проблемы с поиском кода, который переключит ссылку «Логин» для имени пользователя (со ссылкой на страницу профиля)после того, как пользователь входит в систему.

В функциях контроллера я попробовал следующий код:

if(!$this->session->userdata($userSessionVar))
    {
        $data['header_output'] = "<li><a href='" .  base_url() . "index.php/main/login'>Login</a></li>";
    } else 
    {
        $data['header_output'] = $this->session->data('userFirstName');
    }

(я понимаю, что это неполно, исходя из моих проектов, но это простоtest.) $ userSessionVar содержит значение «вошел в систему» ​​после входа в систему. Вероятно, это не лучший способ сделать это.И это, похоже, не работает (и я передаю $ data в представление).Я также попытался создать пользовательскую функцию:

function check_login()
{
$CI =& get_instance();

$userSessionVar = 'logged_in';

if( ! $CI->session->userdata($userSessionVar))
{
    return false;
} return true;
}

, а затем использовать возврат true / false для структурирования переменной $ header_output.Ни один из них, кажется, не работает.Я новичок в CodeIgniter и имею некоторый промежуточный уровень PHP / HTML / CSS и т. Д. Я уверен, что я упускаю что-то очевидное и был бы признателен за любую помощь, а также советы о том, как избежать включения кодав каждой функции контроллера.

Ответы [ 2 ]

1 голос
/ 14 июля 2010

Переменная $userSessionVar доступна только внутри функции check_login(), поэтому при попытке использовать ее вне функции она будет пустой (и, следовательно, бесполезной).

Я рекомендую вам просто использовать $this->session->userdata('logged_in') и $CI->session->userdata('logged_in') вместо использования переменной $userSessionVar для хранения того, что кажется постоянным значением.

Кроме того, у вас есть ошибка в вашем коде. Вам нужно заменить $this->session->data('userFirstName') на $this->session->userdata('userFirstName')

Вот как я обычно работаю с пользовательскими данными. Сначала добавьте auth.php в папку моделей:

<?php

class Auth extends Model {
    private $user_data = false;
    function Auth() {
        parent::Model();

        if ($this->input->post('action') == 'login') $this->login();
        else if ($auth_id = $this->session->userdata('auth_id')) {
            $user = // load user data from the database into the variable $user
            if ($user) {
                $this->user_data = $user;
            } else $this->session->unset_userdata('auth_id');
        }
    }
    function login() {
        // process POST, check with database, and then store user_id using
        // $this->session->set_userdata('auth_id', $user_id_here)
    }
    function me() {
        return $this->user_data? (object)$this->user_data : false;
    }
}

?>

Затем автоматически загрузите модель. Для этого отредактируйте config / autoload.php примерно так:

$autoload['model'] = array('auth');

Теперь ваше утверждение IF может выглядеть так:

if ($me = $this->me()) $data['header_output'] = $me->userFirstName;
else $data['header_output'] = '<li><a href="'.base_url().'index.php/main/login">Login</a></li>';
0 голосов
/ 31 мая 2013

в вашей модели auth.php вы получили утверждения

класс Auth расширяет модель а также Родитель :: Модель ();

С CodeIgniter, не должно ли это быть "CI_Model" ...?

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