Yii: массивы как параметры для действия контроллера
29 октября 2010
И ещё одна приятность, попавшая в SVN. Теперь можно передавать параметрам действий массивы.
class MyController extedns CController { // параметр объявлен как массив function actionArray(array $tests){ foreach($tests as $test){ echo $test; } } // параметр не объявлен как массив function actionScalar($test){ echo $test; } }
- Если в $_GET передан не массив, в
$test
будет только один элемент. - Если параметр не объявлен как массив, а передан массив, получим HTTP ошибку 400 (Bad request).
Напомню, что передать PHP массив через адресную строку можно так:
/my/array/?tests[]=0&tests[]=2&tests[]=4&tests[]=1
Комментарии RSS по email OK
Sam, использовать типизацию параметра функции идея хорошая, и, было б неплохо применить это не только для array, но, добавить еще пару типов: string, integer, float, ну и mixed или без типа.
Эта фича изначально была в коде, но после обсуждений, как публичных, так и внутренних, была исключена из за её неоднозначности.
Возможно в тот раз я неверно понял тему, но тогда вы хотели на основе комментариев делать типизацию, а сейчас же она идет на основе указания типа параметра функции. Хотя, возможно что я плохо знаком с ReflectionApi.
А как-же умолчальный метод actionIndex()? Что будет срабатывать по такому линку site.ru/mycontroller , к примеру?
Умолчательный метод никуда не делся. Просто в примере я его не стал приводить.
Все-таки не понятно. Как срабатывают эти действия? В каком случае? если допустим запрос site.ru/my/array/?tests[]=0&tests[]=2&tests[]=4&tests[]=1 запустится actionArray()? site.ru/my/array/?test запустится actionScalar()?
Конкретно в Вашей строке запуститься actionArray, т.к. вы его и попросили, а если бы вы попросили site.ru/my/scalar то запустился бы actionScalar
А ясно - сразу не поняла - думала они автоматом определяют массив или нет - и запускают соответсвующее действие.