Laravel在合并后获得更新的请求值

时间:2017-06-19 15:11:50

标签: php laravel merge request

我正在尝试使用Request修改Laravel merge对象以更新密钥trial_end

我使用以下代码执行此操作...

if ($this->request->get('trial_end', '')) {
    $this->request->merge(array('trial_end' => 'test'));
}
dd($this->request->all(), $this->request->get('trial_end'));

我希望$this->request->get('trial_end')test,但事实并非如此。 $this->request->all()返回我的预期。

转储结果

array:1 [
  "trial_end" => "test"
]
"12/4/2018" 

为什么不返回更新后的值?

2 个答案:

答案 0 :(得分:1)

想出来。解决方案是改变

$this->request->get('trial_end');

$this->request->input('trial_end');

这是有效的,因为input()all()之前将getInputSource()->all()中的数据添加到data_get,而get()只执行了data_get if ($this->request->has('trial_end')) { $this->request->merge(['trial_end' => 'test']); } dd($this->request->all(), $this->request->input('trial_end')); 输入参数(预修改)。

新代码(由Alex建议更改)

array:1 [
  "trial_end" => "test"
]
"test"

新结果

    [FunctionName("TokenPolicy")]
    public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "TokenPolicy/{IssuerID}/{SpecificationID}")]HttpRequestMessage req, string IssuerID, string specificationID, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request. TokenPolicy");

        // Fetching the name from the path parameter in the request URL
        return req.CreateResponse(HttpStatusCode.OK, "data " +  specificationID);
    }

希望这可以帮助遇到此问题的任何其他人。

答案 1 :(得分:0)

问题不在于作业,但通过比较,我个人最好的方法是检查请求中的值是否已设定。

public function test(Request $request){

    if (!$request->has('trial_end')) { //this is what you have wrong
        $request->merge(array('trial_end' => 'test'));
    }
    return $request->get('trial_end');
}

问候