请求-> 除了在laravel 5 中给我一个数组而不是一个请求对象

Jul*_*oro 4 php httprequest laravel laravel-5

$request->except(['param1'])给我一个数组,我想接收一个Request对象..

我不知道该怎么做...

$employee = EmployeeSnap::firstOrNew(['nss' => $request->nss, 'rfc' => $request->rfc]);

        if ($employee->name != null && $employee->name != "") {
            $employee->setData(Input::except(['bankid', 'bankaccount'])); //Input::except(['bankid', 'bankaccount']) gives me array instead of Request
        } else {
            $employee->setData($request);
        }

        $employee->save();
        $id = $employee->employeeid;
        $code = 200;
        $data = 'Success';
        $message = 'Operation successful';
Run Code Online (Sandbox Code Playgroud)

任何的想法?

pat*_*cus 7

选项1

您可以尝试克隆Request对象并取消设置不需要的变量,如@AlexeyMezenin 所述。然而,这只是一个浅拷贝,所以与原始请求相关的任何对象都将是与新请求相关的完全相同的对象。这可能会也可能不会导致您出现问题。

选项 2

您还可以尝试生成新请求并替换输入。类似的东西:

$newRequest = \Illuminate\Http\Request::capture();
$newRequest->replace($request->except(['param1']));
Run Code Online (Sandbox Code Playgroud)

但是,根据您使用此新请求的方式,它可能会导致不同的问题。

选项 3(最佳)

我认为解决您问题的真正方法是更改模型setData()上的方法EmployeeSnap。Request对象真的应该只在控制器内部使用。控制器应该负责与 交互Request以获取所需的数据,然后它应该根据需要将该数据传递给您的模型。

所以,你的setData方法应该是这样的:

public function setData(array $request) {
    // use your $request array
}
Run Code Online (Sandbox Code Playgroud)

你的控制器应该是这样的:

$employee = EmployeeSnap::firstOrNew(['nss' => $request->nss, 'rfc' => $request->rfc]);

if ($employee->name != null && $employee->name != "") {
    $employee->setData($request->except(['bankid', 'bankaccount']));
} else {
    $employee->setData($request->all());
}

// rest of code ...
Run Code Online (Sandbox Code Playgroud)

这有助于分离您的顾虑,使您的代码更简洁,并解决您的问题。