作为参数发送的数组变为只包含原始数组的第一个值的字符串

时间:2014-09-07 12:55:19

标签: laravel laravel-4

我通过重定向从方法'filterResults'向方法'home'发送一个数组。阵列确实通过,因为URI更改为www.site.com/country/area/city/category。

但是当我在方法'home'中打印数组时,它不再是一个数组,而是一个只包含原始数组的第一个值(country)的字符串。为什么会这样?其他值在哪里?为什么它现在是一个字符串而不是数组?

感谢您的帮助!

路线:

Route::any('home/{s1?}/{s2?}/{s3?}/{s4?}', array(
    'as' => 'home',
    'uses' => 'HomeController@home'
));

控制器方法'filterResults':

public function filterResults() {
    $filter = array('country' => $country, 'area' => $area, 'city' =>  $city, 'category' =>  $category);
    return Redirect::route('home', $filter);
}

控制器方法'主页':

public function home($filter = array()) {
    print_r($filter);  //result is a string with the value for country
}

2 个答案:

答案 0 :(得分:1)

Laravel路由的工作原理并非如此。当你传递一个数组时,它需要一个参数数组。

所以你的home方法实际上会收到4个参数(数组的元素)。

使方法更有意义:

public function home($country = null, $area = null, $city = null, $category = null) {
    print_r($country);
    print_r($area);
    print_r($city);
    print_r($category);
}

请记住,当你在/ country / area / city / category时,Laravel完全不知道你想要那些数组。如果你真的必须在数组中使用它,那么另一种方法是从home方法中删除参数并使用PHP func_get_args,这将以数组形式提供参数。他们虽然是基于0的索引。你甚至可以通过array_map传递给地图0到国家,1到区域,2到城市,3到类别,但是当你可以通过参数得到所有东西时,这可能是很多过剩的工作。

答案 1 :(得分:1)

您需要定义它们以获取参数,例如

public function home($param1 = null, $param2 = null, $param3 = null, $param4 = null) {

}

它创建了一个URL,因为根据文档,Laravel足够聪明。请参阅route parameters中的数组部分。