我通过重定向从方法'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
}
答案 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中的数组部分。