Laravel使用Form Request获取参数1传递错误,必须为数组类型,给定对象


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

我试图在我的应用程序中使用Form Request注册用户,但我得到了这个错误:

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

我的路线:

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

控制器

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

StoreRegisterRealUserAccount类:

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型号:

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);
    }
}

create()函数需要一个数组作为参数,而不是对象($request)。$request->all()方法应该返回一个包含所有请求参数的数组。

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

您可能需要考虑指定要存储的实际参数,因为额外的GET/POST参数可能会破坏代码。

如果您想指定参数,您应该尝试以下操作。。。

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',
        ]));
    }
}

以上操作将仅从$request对象获取指定的请求参数,并将它们作为数组返回。