2012-01-08 3 views
4

Я разрабатываю приложение в CodeIgniter и MySQL. Приложение включает профили пользователей; я использую Tank Auth для регистрации и аутентификации пользователей.данные сеанса, URL профиля отображения в CodeIgniter (w/Tank Auth)

Я установил пару пользователей и теперь хочу просмотреть профиль каждого пользователя. Мне нужно знать:

1 - Как добавить пользовательские данные сеанса в Tank Auth. У меня есть представление о том, как должен выглядеть код (http://codeigniter.com/user_guide/libraries/sessions.html), но я не уверен, где код должен идти в контроллере auth, который довольно обширен - https://github.com/ilkon/Tank-Auth/blob/master/application/controllers/auth.php.

2 - Как передать данные пользователя на вид. Я установил функцию для извлечения пользовательских данных (см. Ниже) и хочу передать ее в мой профиль. Я думаю, что userdata (в коде) будет представлять пользовательские данные сеанса, которые будут включать идентификатор пользователя и имя пользователя, одно из которых мне понадобится для URL.

3 - URL-адрес Я хочу, чтобы URL-адреса выглядели следующим образом: http://example.com/users/3394 или http://example.com/users/fooy_foo. Я знаю, что мне нужно что-то сделать с маршрутизацией CI URI, но я не уверен, как связать его с результатами, которые я получаю от запроса.

Вот код из контроллера пользователя {

function index() 
    {  
    $id = $this->tank_auth->is_logged_in('id'); 

    $this->db->where('id', $id); 
    $q = $this->db->get('user'); 
    $data['userdata']=$q; 

    $this->load->view('user_view', $data); 
    } 
} 

ответ

2
  1. Я не знаком с Tank Auth, но я бы посоветовал вам проверить official page для Tank Auth. Может быть, вы получите лучшее понимание от чтения о библиотеке. Here's учебник, в котором показано, как настроить Tank Auth с помощью CodeIgniter.

  2. Просмотрев свой код, с пользовательского контроллера, я вижу, что вы передаете данные правильным способом. Вы передаете его в виде массива. По вашему мнению, элемент массива будет доступен как переменная. Поэтому для использования данных в представлении вы просто используете переменную $userdata. Если вы хотите добавить больше данных для включения в представление, вы просто добавляете еще один элемент в массив $data!

  3. Если вы создали контроллер с именем users, вы сможете связаться с ним по телефону www.example.com/users. Затем вы можете отредактировать функцию index, чтобы включить параметр $uid, который будет генерировать нужный URL: www.example.com/users/3394.

Пример на # 3:

Допустим, вы создали контроллер users. Это будет вашей функцией index():

function index($userid) { 
    // You should probably have a model here that retrieves information 
    // about the user based on the userid 
    $data['user'] = $this->User_model->getUserInformation($userid); 
    $this->load->view('users', $data); 
} 

Это способ, которым вы можете настроить свою функцию индекса. Переменная $userid определяется по URL-адресу www.example.com/users/ . Именно так работают URL-адреса в кодеигниторе. Вы можете узнать больше об этом here.

+0

Спасибо за ваш ответ. Я проверил документы Tank Auth и не смог найти информацию о добавлении пользовательских данных сеанса. Но не могли бы вы привести мне пример №3? Как бы вы включили параметр $ uid для получения URL-адреса? – chowwy

+0

Я обновил свой ответ на примере для вас! –

+0

КПП. Я нашел учебник о том, как настроить auth с помощью codeigniter. Это год, но, вероятно, будет полезен для вашей цели. http://expertnotfound.wordpress.com/2011/01/20/setting-up-tank-auth-2/ –

5

Я думаю, что Runar ответил # 2 и # 3 для вас. Для # 1 откройте приложение/библиотеки/Tank_auth.php и имя входа в функцию.Вы увидите эти строки кода:

$this->ci->session->set_userdata(array(
             'user_id'  => $user->id, 
             'username'  => $user->username, 
             'status'  => ($user->activated == 1) ? STATUS_ACTIVATED : STATUS_NOT_ACTIVATED, 
           )); 

set_userdata устанавливает сеанс. Вы можете добавить больше переменных, которые будут установлены в сеансе здесь.

+0

Спасибо за это. Я мог принять только один ответ, но я поддержал вас за это. Я смотрел в контроллере auth, поэтому я этого не видел. СПАСИБО!! – chowwy

+0

Рад может быть полезным :) – Ninja

Смежные вопросы