Не сохраняется объект $user
Не мог понять почему у меня не работает код создания пользователя, который срабатывал при отправки формы пользователем. Форма через AjaxForm работает, да не срабатывает и зависает не получив ajax-ответа…
Вот примерный код создающий пользователя:
Решил это дело вытащить в Console и проверить. Результат тот же самый!
Код выполняемый в Console:
Что я неправильно делаю?
Мой код вроде должен работать правильно, все эти ссылки у меня тоже не работают даже при копипасте:
www.createit.ru/blog/modx/2012/programmatically-creating-users/
maker.su/modx/kod-sozdaniya-polzovatelya-modx-revolution/
tzh.kz/sections/notes/6.html
Вот примерный код создающий пользователя:
// создаем пользователя
$user = $modx->newObject('modUser');
$user->set('username', $username);
$user->set('password', $password);
$modx->log(modX::LOG_LEVEL_ERROR, 'Сохраняем юзера');
if($user->save()) { // тут скрипт зависает
$modx->log(modX::LOG_LEVEL_ERROR, '===================>Пользователь создан. Логин: '.$username.', пароль: '.$password);
} else {
$modx->log(modX::LOG_LEVEL_ERROR, '===================>Пользователь НЕ создан');
}
// создаем профиль
$modx->log(modX::LOG_LEVEL_ERROR, 'создаем профиль');
$profile = $modx->newObject('modUserProfile');
$profile->set('fullname', $_POST['face']);
$profile->set('email', $_POST['email']);
$modx->log(modX::LOG_LEVEL_ERROR, 'Подключаем профиль к пользователю');
$user->addOne($profile);
$modx->log(modX::LOG_LEVEL_ERROR, 'Профиль подключён');
// сохраняем
$profile->save();
$user->save();
$modx->log(modX::LOG_LEVEL_ERROR, 'Профиль и пользователь сохранены');
Путём логирования выяснил, что скрипт стопорится на строчке:$user->save();
В результате создаётся пользователь только в таблице modx_users. Профиль в modx_user_attributes либо не создаётся, либо создаётся с internalKey = 0Решил это дело вытащить в Console и проверить. Результат тот же самый!
Код выполняемый в Console:
$username = 'xxxxxxxxx@yandex.ru';
$email = 'xxxxxxx@yandex.ru';
$fullname = 'Face';
$password = '123456789';
print '=================== Создаём ползователя
';
// создаем пользователя
$user = $modx->newObject('modUser');
// задаем имя пользователя и пароль
$user->set('username', $username);
$user->set('password', $password);
print '=================== Сохраняем ползователя
';
$user->save();
print '=================== Создаём профиль
';
$profile = $modx->newObject('modUserProfile');
print '=================== Инициируем поля
';
$profile->set('fullname', $fullname);
$profile->set('email', $email);
print '=================== Добавляем профиль к пользователю
';
$user->addOne($profile);
print '=================== Сохраняем
';
$profile->save();
$user->save();
print '=================== Сохранено!
';
Создаётся профиль пользователя с internalKey равным нулю (0).Что я неправильно делаю?
Мой код вроде должен работать правильно, все эти ссылки у меня тоже не работают даже при копипасте:
www.createit.ru/blog/modx/2012/programmatically-creating-users/
maker.su/modx/kod-sozdaniya-polzovatelya-modx-revolution/
tzh.kz/sections/notes/6.html
Комментарии: 4
Что я неправильно делаю?
Не нужно отдельно сохранять профиль, если ты его присоединяешь через addOne. Просто убери вообще
$profile->save();
Ну и в любом случае, сохранять профиль до сохранения юзера, которому он принадлежит — нелогично, да?
Спасибо за совет, не знал…
Но к сожалению это проблемы не решило. Профиль сохраняется в самом конце этого кода, а зависает в самом начале, во время первого сохранения
УРАА! Работает! Ты оказался полностью прав — нечего сохранять пользователя, потом создавать профиль и снова сохранять пользователя — достаточно просто присоединить профиль через addOne!
В итоге удалил первый $user->save(); и $profile->save();. И всё заработало!
P.S. Странно, почему в приведённых мною ссылках код другой… Может что-то в MODX изменилось с момента написания тех статей…
УРАА! Работает! Ты оказался полностью прав — нечего сохранять пользователя, потом создавать профиль и снова сохранять пользователя — достаточно просто присоединить профиль через addOne!
В итоге удалил первый $user->save(); и $profile->save();. И всё заработало!
P.S. Странно, почему в приведённых мною ссылках код другой… Может что-то в MODX изменилось с момента написания тех статей…
Замечание Василия верное, но думается мне что не в этом проблема. Даже при таком коде должно работать.
Заработало — Василий был прав. Отписался комментарием выше.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.