【问题标题】:Laravel pass value from controller to route and then to controllerLaravel 将值从控制器传递到路由,然后再传递给控制器
【发布时间】:2016-04-16 02:02:13
【问题描述】:

完成我的第一个 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 中的情况下传递这些变量?或者以不同的方式存储它们。我可能会做得比它应该的更难。再次感谢您的时间和帮助。

【问题讨论】:

    标签: php laravel routes


    【解决方案1】:
    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'));
    

    【讨论】:

    • 那不是我的网址然后是 www.domain.com/zipcode/city/state/provider/data 吗?我只想要 URL 中的邮政编码,但仍然有这些变量
    【解决方案2】:

    您是否尝试过使用“紧凑型”来执行此操作?

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

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

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

    【讨论】:

    • 我还没有尝试使用“紧凑”代码。我应该对所有人都这样做吗?我可以在 SearchController 中的“返回视图”上轻松传递变量,但是当我“返回重定向”到命名路由时。所以我可以获得正确的 URL “www.domain.com/multi-provider/{zipcode}。我不能将它们传递给 PageController@multiProvider 然后在那里的视图中显示它们。
    • 您是否尝试将这些变量保存在会话中,然后将它们放在您需要的任何地方?在 Laravel 中,您可以像这样轻松地做到这一点: 'session->put('nameOfVariable, 'value); $someVariable = session()->get('someVariable');'
    • 我已经阅读了一些关于 session 的内容,但还没有完全理解它们。有链接或者文章吗。我将在 Laravel Doc 网站上阅读更多内容。我不明白如何从输入的查询中获取值并存储它们。因此,如果他们搜索邮政编码,我需要在会话中存储邮政编码城市州提供者。然后在视图或控制器中检查会话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多