Мне нужно передать массив фильтру в конструкторе моего контроллера. Проблема в том, что для передачи параметров в фильтр вы делаете:
$this->beforeFilter('filterName:param1,param2');
И чтобы передать массив, мне нужно json_encode
который делает массив в виде строки, разделенной запятой. Итак, следующая команда:
$array = ['this', 'that', 'other'];
$this->beforeFilter('filterName:' . json_encode($array));
// The above line basically becomes:
// $this->beforeFilter('filterName:["this","that","other"]');
передается в мой фильтр как:
Route::filter('filterName', function($route, $request, $param1, $param2, $param3)
{
// $param1 is ["this"// $param2 is "that"// $param3 is "other"]
});
Поскольку я не знаю, насколько велик мой массив, я не могу восстановить массив. Что я могу сделать?
Обновить
Я мог бы так
Route::filter('filterName', function($route, $request, $value)
{
$params = array_except(func_get_args(), array(0, 1));
if(count($params) > 3) {
$params = json_decode(implode(",", $params));
// Now use $params
}
});
Это отлично работает для массива. но если я передам встроенный массив, результат становится stdObject
Это нормально, но мне не нравится тот факт, что я передал массив и получил объект.
Задача ещё не решена.
Других решений пока нет …