Magento – Magento 2: How to Create admin user programmatically using frontend controller

adminfrontendmagento2

I want to create an admin user programmatically , from the frontend controller my frontend code is:

<?php 
namespace Learning\HelloPage\Controller\Account;
use Magento\Framework\App\Action\Context;
class Add extends \Magento\Backend\App\Action
{ 
    protected $_userFactory;

    public function __construct(
        \Magento\User\Model\UserFactory $userFactory
       ) 
    {
        $this->_userFactory = $userFactory;
    }

    public function execute(){

        $adminInfo = [
            'username'  => 'killer',
            'firstname' => 'admin',
            'lastname'    => 'admin',
            'email'     => 'me@helloworld.com',
            'password'  =>'hello@123',       
            'interface_locale' => 'en_US',
            'is_active' => 1
        ];

        $userModel = $this->_userFactory->create();
        $userModel->setData($adminInfo);
        $userModel->setRoleId(7);
        try{
           $userModel->save(); 
           echo 'saved';
        } catch (\Exception $ex) {
            $ex->getMessage();
        }
    }
}

it is giving me this error.
enter image description here

Best Answer

For the first thing If you are using this controller on frontend side then you should extend the Magento\Framework\App\Action\Action class Instead of Magento\Backend\App\Action

And you can use below script to create an user for admin

use \Magento\User\Model\UserFactory;
use \Magento\User\Model\ResourceModel\User;

public function __construct(
       ...... 
        UserFactory $userFactory,
        User $userResourceModel,     
        .....
    ) {
        $this->userFactory = $userFactory;
        $this->userResourceModel = $userResourceModel;
    }

Now you can use this like,

    $model = $this->userFactory->create();        
    $model->setRoleId(7);// change with it 
    $data = array(
        'username' => 'killer',
        'firstname' => 'killer',
        'lastname' => 'killer',
        'email' => 'me@helloworld.com',
        'password' => 'hello@123',
        'is_active' => 1,
        'interface_locale' => ' en_US',
        'role_id' => 7
    );
    $model->setData($data);
    $this->userResourceModel->save($model);