Laravel,如何通过redirect()route()传递对象?

时间:2018-08-03 15:15:44

标签: php laravel

我的目标是将对象从当前函数传递到其他函数。如您所见,下面的代码已在控制器部分提供了多种return方法。我已经评论了每个错误。我不确定为什么会发生这种情况,尽管其中一些方法来自其他一些问题的投票答案。

数组内容[dump($ data = $ request-> all()); ]

enter image description here

控制器

public function supply_status(Request $request, $data)
{
    dump($data);
}

public function supply_redirect(Request $request)
{
    $data = $request->all();

    //option 1
    return redirect()->route('supply_status', compact('data')); // "Array to string conversion" error

    //option 2
    return redirect()->route('supply_status', ['data' => $data]); // "Array to string conversion" error

    //option 3
    return redirect()->route('supply_status')->with('data', $data); // Missing required parameters for [Route: supply_status] [URI: supply_status/{data}].

    //option 4
    return redirect()->action('TestController@supply_status')->with('data', $data); // Missing required parameters for [Route: supply_status] [URI: supply_status/{data}].
}

路线

Route::get('supply_status/{data}', 'TestController@supply_status')->name('supply_status');

2 个答案:

答案 0 :(得分:1)

在这种情况下,您确实应该使用Session

Session::put('customer_data', $request->all());
Session::save();
redirect()->route('foobar');

在foobar中

if($data = Session::get('customer_data')) {
   dump($data);
}

您也可以执行以下操作:redirect()->with(['customer_data' => $request->all()]),然后用Session::get('customer_data')session()->get('customer_data')相同的方式获取它

答案 1 :(得分:-3)

您可以使用PHP函数序列化并将结果放入GET或POST参数: http://php.net/manual/fr/function.serialize.php

然后,您必须反序列化您的数据: http://php.net/manual/fr/function.unserialize.php

但这并不安全,因为用户可以修改该数据。您应该根据需要进行此操作,以保持其在会话中或其他状态。

return redirect()-> route('supply_status',['data'=> serialize($ data)]);

dump(unserialize($ data));