Tank Auth Добавление полей - PullRequest
2 голосов
/ 16 августа 2011

Я работал с библиотекой Tank Auth весь день и у меня есть вопрос по этому поводу.Я добавил два поля в форму регистрации: first_name и last_name соответственно, и я пытаюсь выяснить, почему он не вставляется на страницу user_profiles.

При обновленном коде я получаю эту ошибку:

Обнаружена ошибка PHP

Серьезность: Предупреждение

Сообщение: отсутствует аргумент 5 для Tank_auth :: create_user (), вызываемый в / home / xtremer / public_html / kowmanager /application / controllers / auth.php в строке 136 и определено

Имя файла: library / Tank_auth.php

Номер строки: 162 Обнаружена ошибка PHP

Важность: Примечание

Сообщение: неопределенное свойство: Tank_auth :: $ users

Имя файла: library / Tank_auth.php

Номер строки: 188

Неустранимая ошибка: вызовфункция-член UpdateProfileInfo () для необъекта в /home/xtremer/public_html/kowmanager/application/libraries/Tank_auth.php в строке 188

Обновленный код:

Auth Controller

Tank Auth Library

Модель пользователя

Есть идеи, что я делаю не так сейчас?

Я поставлю 50Назовите это вознаграждение, но я не могу получить ссылку, чтобы получить вознаграждение.

Ответы [ 3 ]

8 голосов
/ 16 августа 2011

Что вам нужно сделать, это поместить два нужных столбца в таблицу user_profiles, а затем добавить функцию к models/tank_auth/users.php, например:

function UpdateProfileInfo ($userID, $firstname, $lastname)
{
    return $this->db->update('user_profiles', array('firstname'=>$firstname, 'lastname'=>$lastname), array('user_id' => $userID)); 
}

Затем заменить (в /libraries/Tank_auth.php)
function create_user($username, $email, $password, $email_activation)
С
function create_user($username, $email, $password, $email_activation, $userInfo)

Затем прямо под (в /libraries/Tank_auth.php)
if (!is_null($res = $this->ci->users->create_user($data, !$email_activation))) { Добавить
$this->users->UpdateProfileInfo($userInfo["firstname"],$userInfo["lastname"]);

Затем замените (в /controllers/auth.php)

        if ($this->form_validation->run()) {                                // validation ok
            if (!is_null($data = $this->tank_auth->create_user(
                    $use_username ? $this->form_validation->set_value('username') : '',
                    $this->form_validation->set_value('email'),
                    $this->form_validation->set_value('password'),
                    $email_activation))) {                                  // success

на:

$userInfo["firstname"] = $this->form_validation->set_value("firstname");
$userInfo["lastname"]  = $this->form_validation->set_value("lastname");

if ($this->form_validation->run()) {                                // validation ok
    if (!is_null($data = $this->tank_auth->create_user(
            $use_username ? $this->form_validation->set_value('username') : '',
            $this->form_validation->set_value('email'),
            $this->form_validation->set_value('password'),
            $email_activation, $userInfo))) {                                   // success

Это не проверено, хотя должно работать, скажите, как оно идет
Макс

2 голосов
/ 16 августа 2011

Я заметил пару вещей:

private function create_profile($user_id, $data)
{
    $this->db->set('user_id', $user_id);
    $this->db->set('first_name', $first_name);
    $this->db->set('last_name', $last_name);
    return $this->db->insert($this->profile_table_name);
}

$data - это массив, я предполагаю, что вы ДОЛЖНЫ передать first_name и last_name здесь (что вы делаетенет).

Кроме того, TANK AUTH требует от вас обновить столбцы, необходимые для схемы базы данных профиля (вы это делали? не упомянул).

Чтобы исправить приведенный выше код, вам нужнонужно передать больше деталей в массиве ($data) примерно так:

$data['first_name'] = "Bob";
$data['last_name']  = "Smith";

create_profile($user_id, $data); // which would then use the first & last names 

Не то чтобы я хотел продолжать разговор об этом, но ... *

Вам нужно сделать только то, что я вам показал:

  • определить 2 переменные (имя и фамилия) и передать их create_profile fn.
  • правильно ИСПОЛЬЗУЙТЕ переменные (не используйте $data[0], то есть SLOPPY, сделайте $data['first_name'], если это то, что вы называете значением массива. Нет причин быть неаккуратным и делать $ data [0] - угадывать не меньше призначение ключа вашего массива).
  • это не сложно, прочитайте ваш код (поймите, если вы этого не сделаете, то сделайте шаг назад и постарайтесь разбить его построчно, что hЯ чувствую, что вы понятия не имеете, что делает любая из этих функций).
1 голос
/ 09 сентября 2011

Проверьте файл Tank_auth в библиотеке, есть еще одна функция «create_user», которую вы должны изменить.Чтобы правильно управлять переменными.3 часа ломаю голову с этим.

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