更新路线的响应数据

时间:2016-08-18 02:53:18

标签: php laravel laravel-5

我有一条路线:

 .../first

以下调用函数:

function first() {
   $data['first'] = 1;
   return response()->json($data);
} 

然后我正在研究新路线:

.../second

这个电话:

function second() {
   ...
   if ($condition) {
      return redirect()->to('.../first');
   }
}

这是回归:

{
  "first": 1
}

我想得到一个结果,当我调用second()函数时,看起来像:

{
  "first": 1,
  "second" : 2
}

我该怎么做,我正在尝试将密钥second放到redirect()(Cannot use object of type Illuminate\Http\RedirectResponse as array)的响应中 ,以及检查条件:

function first() {
   $data['first'] = 1;
   if (Request::is('.../second') { 
      $data['second'] = 2; // but this never execute,request now is ".../first"
   }
   return response()->json($data);
} 

任何人都可以帮助我吗?谢谢你的阅读。

1 个答案:

答案 0 :(得分:1)

如果first()second()位于同一个控制器中,您可以在类定义中声明数据

class ...
{
    var $data;

    function first() {
        $this->data['first'] = 1;
        return response()->json($this->data);
    }

    function second() {
        if ($condition) {
            $this->data['second'] = 2;
            return $this->first(); // No redirect
        }
        ...
    }

如果上述解决方案无论如何都不可行,请在路由定义中为first()保留一个可选参数。

Route::get('/first/{data?}', 'SomeController@first')->name('first');

参考 - https://laravel.com/docs/5.2/routing#route-parameters

然后,您可以使用first()函数中的数据重定向到second()

function second() {
    if ($condition) {
        return redirect()->route('first', ['data' => ['second' => 2]]);
    }
    ...
}

现在,收到的参数可以轻松地合并到您的first()功能中。

function first($data = []) {
    $data['first'] = 1;
    return response()->json($data);
}