Не сохраняется объект $user

Не мог понять почему у меня не работает код создания пользователя, который срабатывал при отправки формы пользователем. Форма через AjaxForm работает, да не срабатывает и зависает не получив ajax-ответа…

Вот примерный код создающий пользователя:

// создаем пользователя
$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
Василий Столейков
30 марта 2016, 17:27
modx.pro
1
1 769
0

Комментарии: 4

Василий Наумкин
30 марта 2016, 20:58
0
Что я неправильно делаю?

Не нужно отдельно сохранять профиль, если ты его присоединяешь через addOne. Просто убери вообще
$profile->save();

Ну и в любом случае, сохранять профиль до сохранения юзера, которому он принадлежит — нелогично, да?
    Василий Столейков
    30 марта 2016, 21:17
    0
    Спасибо за совет, не знал…
    Но к сожалению это проблемы не решило. Профиль сохраняется в самом конце этого кода, а зависает в самом начале, во время первого сохранения

    УРАА! Работает! Ты оказался полностью прав — нечего сохранять пользователя, потом создавать профиль и снова сохранять пользователя — достаточно просто присоединить профиль через addOne!
    В итоге удалил первый $user->save(); и $profile->save();. И всё заработало!

    P.S. Странно, почему в приведённых мною ссылках код другой… Может что-то в MODX изменилось с момента написания тех статей…
    Владимир Бабусенко
    30 марта 2016, 21:09
    0
    Замечание Василия верное, но думается мне что не в этом проблема. Даже при таком коде должно работать.
      Василий Столейков
      30 марта 2016, 21:20
      0
      Заработало — Василий был прав. Отписался комментарием выше.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4