Создание пользователя Joomla.
При создании компонента личного кабинета потребовалось создать связанного с абонентом пользователя Joomla.
Вот тут метод из соответствующей модели.
<?php defined('_JEXEC') or die('Restricted access'); // кормим демонов Joomla 4 use \Joomla\CMS\{ MVC\Model\AdminModel as JModelAdmin, Factory as JFactory, Language\Text as JText, User\User as JUser, Component\ComponentHelper as JComponentHelper, User\UserHelper as JUserHelper }; // ........ class CabinetModelSubscriber extends JModelAdmin { // .......... /** * Метод сохранения данных формы. * * @param array $data Данные формы. * * @return boolean True при успешном выполнении, False при ошибке. * * @since 1.6 */ public function save($data) { // Создаем связанного юзаря $user = new JUser((int)$data['user_id']); // Если юзарь новый и пароль не заполнен if($data['user_id']==0&&empty($data['password'])) { // То выводим сообщение об ошибке JFactory::getApplication()->enqueueMessage( JText::_('COM_CABINET_SUBSCRIBERS_PASSWORD_ERROR'), 'error' ); } // Если юзарь просто новый то готовим его с лучком и селёдочкой elseif($data['user_id']==0) { // Проверяем наличие совпадения username if(JUserHelper::getUserId('user_'.$data['number'])) { JFactory::getApplication()->enqueueMessage( JText::_('COM_CABINET_SUBSCRIBERS_USERNAME_ERROR'), 'error' ); } else { // получим группу пользователей из параметров компонента $usergroup = [ JComponentHelper::getParams('com_cabinet')->get('usergroup') ]; // Готовим массив параметров юзаря $userData = [ 'username' => 'user_'.((int)$data['number']), 'password' => $data['password'], 'password2' => $data['password'], 'block' => 0 ]; } } elseif(!empty($data['password'])) { // Если надо просто поменять пароль - то заполняем его $userData = [ 'password' => $data['password'], 'password2' => $data['password'] ]; } // Добавляем синхронизируемые параметры $userData['email'] = $data['email']; $userData['name'] = $data['name']; // Связать данные. if (!$user->bind($userData)) { $this->setError($user->getError()); } // Сохраняем юзаря if(!$user->save()) { // Вывод сообщения об ошибке, если не сохранилось. JFactory::getApplication()->enqueueMessage( JText::_('COM_CABINET_SUBSCRIBERS_CREATE_ERROR'). '<br />'.$user->getError(), 'error' ); } else { // привязываем пользователя к текущей записи $data['user_id'] = $user->id; // включить юзаря в группу if(isset($usergroup)) { JUserHelper::setUserGroups($user->id, $usergroup); } } // Удаляем поле пароля unset($data['password']); // сохраняем текущюю запись return parent::save($data); } }