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