【问题标题】:Laravel - Redirect to route with optional parametersLaravel - 使用可选参数重定向到路由
【发布时间】:2015-02-07 19:14:59
【问题描述】:

我有这条路线:

Route::get('search/{state?}/{city?}/{brand?}/{model?}', array('as'=>'search-cars'), function($a=false, $b=false, $c=false, $d=false) {
    // Do stuff
}

如何从控制器向上述路由发送参数?我试过了:

public function postHomeSearch() {
    $state= (Input::get('state')) ? Input::get('state') : null;
    $city = (Input::get('city')) ? Input::get('city') : null;
    $brand= (Input::get('brand')) ? Input::get('brand') : null;
    $model= (Input::get('model')) ? Input::get('model') : null;

    $data = array(
        'state' => $state,
        'city'  => $city,
        'brand'  => $make,
        'model' => $model,
    );

    return Redirect::route('search-cars',$data);  // <---- HERE
}

请注意,有些参数如果未选中,可能为空

【问题讨论】:

  • 您的代码看起来不错。如果它为空,您是否尝试过不包括数组中的参数?另外,匹配函数签名上的参数名称。
  • 这个解决方案有什么问题?
  • @facundofarias 和 lukasgeiter... 我在调用 postHomeSearch() 时得到这个 URL localhost/laravel/App/public/search///California///All -- 注意三重 ///
  • 在我看来,一些null 值是问题所在。如果只设置了brand,你期望的 URL 是什么?
  • @lukasgeiter 我希望 localhost/laravel/App/public/search/brandName 或者如果也设置了 city 则 localhost /laravel/App/public/search/brandName/City

标签: php laravel routing routes


【解决方案1】:

在我看来,问题出在null 值上。您可以使用array_filter 删除那些,然后将数据传递给重定向函数,而不是作为关联数组,而是作为值(因此它们将按顺序而不是按参数名称解​​析)

$data = Input::only('state', 'city', 'brand', 'model');
$data = array_filter($data); // remove falsy values
$data = array_values($data); // remove keys
return Redirect::route('search-cars', $data);

【讨论】:

  • 很高兴听到这个消息。我还建议您将路由中的参数名称更改为{a?}/{b?}。它将更清楚地表明{state?} 实际上不必是状态...
猜你喜欢
  • 1970-01-01
  • 2017-04-01
  • 2014-10-19
  • 2015-02-05
  • 1970-01-01
  • 2017-06-01
  • 2021-01-22
  • 1970-01-01
相关资源
最近更新 更多