从一个控制器重定向到另一个控制器

时间:2017-08-23 05:16:42

标签: php laravel

我的控制器中有一个数组,我想用这个数组数据重定向到另一个路径。

class HomeController {
   public function start() {
      $dirs = ['X', 'Y'];

      return redirect()->route('success', $dirs);
   }

   public function next($dirs) {
      dd($dirs); // aim is getting data here
   }
}

我的路线看起来像:

Route::post('/success', ['as' => 'success', 'uses' => 'HomeController@next']);

我尝试了get方法,但后来我需要弄乱网址并将/success/{dirs}放在那里,这是我不想要的。

实现这一目标的正确方法是什么?

更新

使用它不起作用:S

public function start() {
    return redirect()->route('success', $dirs)->with('dirs', $dirs)->with('clientNames', $clientNames);
}

public function next() {
   dd(session('dirs') // returns null
}

2 个答案:

答案 0 :(得分:4)

route方法的第二个参数是查询参数,它会将您的数组值附加到路径,如/success?X&Y

function route($name, $parameters = [], $absolute = true)
{
    return app('url')->route($name, $parameters, $absolute);
}

使用with方法将数据放入会话中,然后使用另一条路径上的session辅助函数检索它,而不是将数组传递给路径。

Documentaion:Redirecting with flashed session data

试试这个

<强>路线

Route::get('/success', 'HomeController@next')->name('success');

<强>控制器

class HomeController 
{
    public function start() 
    {
        $dirs = ['X', 'Y'];

        return redirect()->route('success')->with('dirs', $dirs);
    }

    public function next() 
    {
        $dirs = session('dirs');
    }
}

答案 1 :(得分:1)

你应该试试这个:

附加数据with()方法,并使用session:get()方法在另一个函数中访问您的数据,如:

use Illuminate\Http\Request;

class HomeController {
    public function start(Request $request) {
        $dirs = ['X', 'Y'];

        return redirect()->route('success')->with('dirs', $dirs);
    }

    public function next(Request $request) {
      $dirs = array();
      if($request->session()->has('dirs')) {
        $dirs = $request->session()->get('dirs');
      }

    }
}