Laravel将值从控制器传递到路由,然后再传递到控制器


Laravel pass value from controller to route and then to controller

完成我的第一个Laravel项目。谢谢你的帮助。

我有一个SearchController,它指示如果查询的计数大于1,则转到所提供的视图。

return view('pages/multi-providers')->with('data',$data)->with('city',$city)->with('state',$state)->with('provider',$provider)->with('zipcode',$zipcode);

我能够传递以这种简单方式创建的变量。但接下来的路线是www.domain.com/search/?q=01035

所以我尝试将返回重定向到一个命名的路由

return redirect()->route('multi-providers',[$zipcode])->with('data',$data)-  >with('city',$city)->with('state',$state)->with('provider',$provider)->with('zipcode',$zipcode);

那么我在routes.php中的路线是

Route::get('multi-providers/{zipcode}', ['uses' => 'PagesController@multiProviders','as' => 'multi-providers'])->with('data',$data)->with('city',$city)->with('state',$state)->with('provider',$provider)->with('zipcode',$zipcode);

然后在我的PageController@multiProviders我有

public function multiProviders($zipcode)
    {
        $data['zipcode'] = $zipcode;
        return view('pages/multi-providers')->with('data',$data)->with('city',$city)->with('state',$state)->with('provider',$provider)->with('zipcode',$zipcode);
}

路线开始工作,并且显示为

www.domain.com/multi-provider/{zipcode}(acutally shows zip like 92804)

但后来我得到一个错误,$city和$state变量没有定义。所以我试着像公共函数中的邮政编码一样传递它们,但它说它缺少一个参数。我猜是因为我在路由中没有额外的参数,比如url中的{city}或{state}。有没有办法在URL中不包含这些变量的情况下传递这些变量?或者用一种不同的方式来储存它们。我可能会做得更难。再次感谢你的时间和帮助。

你试过用"compact"来做这件事吗?

像这样在你的公共控制器:

return view('pages.multi-providers', compact('zipcode', 'data', etc. etc.));

这使它更可读,并且应该正确地传递这些变量。

Route::get('multi-providers/{zipcode}/{city}/{state}/{provider}/{data}', ['uses' => 'PagesController@multiProviders','as' => 'multi-providers']);

然后你从像这样的控制器中得到这些变量

public function multiProviders($zipcode, $city, $state, $provider, $data)
{
    return view('pages/multi-providers', compact('zipcode', 'city', 'state', 'provider', 'data'))}

要用这些参数走这条路线,你应该做这个

return redirect()->route('multi-providers',compact('zipcode', 'city', 'state', 'provider', 'data'));
相关文章: