Tank Auth Добавление полей
Я работал с библиотекой Tank Auth весь день и у меня есть вопрос по этому поводу. Я добавил два поля в форму регистрации: first_name и last_name соответственно, и я пытаюсь выяснить, почему его не вставляют на страницу user_profiles.
С обновленным кодом я получаю эту ошибку:
Обнаружена ошибка PHP
Серьезность: Предупреждение
Сообщение: отсутствует аргумент 5 для Tank_auth::create_user(), вызванный в /home/xtremer/public_html/kowmanager/application/controllers/auth.php в строке 136 и определенный
Имя файла: библиотеки /Tank_auth.php
Номер строки: 162 Обнаружена ошибка PHP
Серьезность: Уведомление
Сообщение: неопределенное свойство: Tank_auth::$users
Имя файла: библиотеки /Tank_auth.php
Номер строки: 188
Неустранимая ошибка: вызов функции-члена UpdateProfileInfo() для необъекта в /home/xtremer/public_html/kowmanager/application/libraries/Tank_auth.php в строке 188
Обновленный код:
Любые идеи о том, что я делаю не так сейчас?
Я возложу на это вознаграждение в 50 баллов, но не могу получить ссылку, чтобы получить вознаграждение.
3 ответа
То, что вы должны сделать, это поместить два нужных столбца в 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
Это не проверено, хотя это должно работать, скажите мне, как это идет
Максимум
Я заметил пару вещей:
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
п. - правильно использовать переменные (не используйте
$data[0]
это НЕДОСТАТОЧНО, делай$data['first_name']
если это то, что вы назвали значением массива. Нет причин быть неаккуратным и делать $data[0] - угадывая не меньше значения ключа вашего массива). - Это не сложно, прочитайте ваш код (поймите, если вы не сделаете шаг назад и постарайтесь разбить его на построчно, что происходит, я чувствую, что вы понятия не имеете, что делает любая из этих функций).
Проверьте файл Tank_auth в библиотеке, есть еще одна функция "create_user", которую вы должны изменить. Чтобы правильно управлять переменными. 3 часа ломаю голову с этим.