user4790312
user4790312

Reputation:

Laravel using Form Request get Argument 1 passed error, must be of the type array, object given

i'm trying to use Form Request for register users in my application but i get this error:

Argument 1 passed to Illuminate\Database\Eloquent\Model::create() 
must be of the type array, object given, 
called in /var/www/app/app/Http/Controllers/RegisterNewUsersPgController.php 
on line 28 and defined

My Route:

Route::post('registerRealUserAccount'  ,'RegisterNewUsersPgController@registerRealUserAccount');

Controller:

class RegisterNewUsersPgController extends Controller
{
    /*
     * RegisterRealUserAccount
     *
     * @param StoreRegisterRealUserAccount $request
     */
    public function registerRealUserAccount(StoreRegisterRealUserAccount $request)
    {
        AccountRealUsers::create($request);
    }
}

StoreRegisterRealUserAccount class:

class StoreRegisterRealUserAccount extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
        ];
    }
}

AccountRealUsers Model:

class AccountRealUsers extends Model
{
    protected $table = 'account_reaL_users';
    protected $fillable = [
                            'acceptor_farsi_name',
                            'acceptor_english_name',
                            'display_name',
                            'username',
                            'password',
                            'service_type',
    ];

    protected $guarded = ['users'];

    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = Hash::make($value);
    }
}

Upvotes: 1

Views: 5436

Answers (1)

RCrowt
RCrowt

Reputation: 961

The create() function requires an array as a parameter, not an object ($request). The $request->all() method should return an array of all your request parameters.

class RegisterNewUsersPgController extends Controller
{
    /*
     * RegisterRealUserAccount
     *
     * @param StoreRegisterRealUserAccount $request
     */
    public function registerRealUserAccount(StoreRegisterRealUserAccount $request)
    {
        AccountRealUsers::create($request->all());
    }
}

You might want to consider specifying the actual parameters you want to store because an extra GET/POST parameter could break your code.

If you want to specify the parameters you should try the following...

class RegisterNewUsersPgController extends Controller
{
    /*
     * RegisterRealUserAccount
     *
     * @param StoreRegisterRealUserAccount $request
     */
    public function registerRealUserAccount(StoreRegisterRealUserAccount $request)
    {
        AccountRealUsers::create($request->only([
            'acceptor_farsi_name',
            'acceptor_english_name',
            'display_name',
            'username',
            'password',
            'service_type',
        ]));
    }
}

The above will get only the specified request parameters from the $request object and return them as an array.

Upvotes: 1

Related Questions