2016-03-15 64 views
1

$request->except(['param1'])给我一个数组,我想收到一个Request对象..请求 - >除了给我一个数组,而不是在laravel Request对象5

我不知道该怎么做.. 。

$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

选项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

我想我已经明白你想要什么,为什么(感谢更新后的代码)。我想你将无法使用标准Laravel的方法来做到这一点,但你可以做这样的事情:

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

所以,你克隆请求类的实例,只是从中删除不安全性与unset()。然后你可以在代码中使用$requestCopy。这是我能想象得到的唯一方法。

这段代码只是一个例子,你可以做一些类似的工作。

+0

我正在尝试它,它似乎工作! –

+0

我测试了它,并且它不工作 - >必须是Illuminate \\ Http \\ Request的一个实例,给出的数组。我认为这是工作,因为PhpStorm不会给我的错误... –

+0

我会加入我的代码,也许我做错了什么... –

相关问题