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

时间:2016-03-15 16:53:10

标签: php laravel laravel-5 httprequest

$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';

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

选项1

您可以尝试克隆Request对象并取消设置不需要的变量,如@AlexeyMezenin所述。但是,这只是一个浅表副本,因此与原始请求相关的任何对象都将是与新请求相关的完全相同的对象。这可能会或可能不会导致您的问题。

选项2

您还可以尝试生成新请求并替换输入。有点像:

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

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

选项3(最佳)

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

因此,您的setData方法应如下所示:

public function setData(array $request) {
    // use your $request array
}

您的控制器应如下所示:

$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 ...

这有助于区分您的疑虑,使您的代码更清洁,并解决您的问题。

答案 1 :(得分:1)

我想我已经明白了你想要什么以及为什么(感谢更新的帖子和代码)。我想你无法用标准的Laravel方法做到这一点,但你可以这样做:

$requestCopy = clone $request;
unset($requestCopy->bankid);
unset($requestCopy->bankaccount);

因此,您正在克隆Request类的实例,只是使用unset()从中删除不安全的属性。然后,您可以在代码中使用$requestCopy。这是我能想象到的唯一方法。

这段代码只是一个例子,你可以做一些适合你的事情。