Browse Source

Fixes #1156: action parameter binding now checks for array type.

tags/2.0.0-beta
Qiang Xue 11 years ago
parent
commit
dbecf848f4
  1. 12
      framework/yii/web/Controller.php

12
framework/yii/web/Controller.php

@ -41,7 +41,7 @@ class Controller extends \yii\base\Controller
* @param \yii\base\Action $action the action to be bound with parameters * @param \yii\base\Action $action the action to be bound with parameters
* @param array $params the parameters to be bound to the action * @param array $params the parameters to be bound to the action
* @return array the valid parameters that the action can run with. * @return array the valid parameters that the action can run with.
* @throws HttpException if there are missing parameters. * @throws HttpException if there are missing or invalid parameters.
*/ */
public function bindActionParams($action, $params) public function bindActionParams($action, $params)
{ {
@ -57,7 +57,15 @@ class Controller extends \yii\base\Controller
foreach ($method->getParameters() as $param) { foreach ($method->getParameters() as $param) {
$name = $param->getName(); $name = $param->getName();
if (array_key_exists($name, $params)) { if (array_key_exists($name, $params)) {
$args[] = $actionParams[$name] = $params[$name]; if ($param->isArray()) {
$args[] = $actionParams[$name] = is_array($params[$name]) ? $params[$name] : [$params[$name]];
} elseif (!is_array($params[$name])) {
$args[] = $actionParams[$name] = $params[$name];
} else {
throw new HttpException(400, Yii::t('yii', 'Invalid data received for parameter "{param}".', [
'param' => $name,
]));
}
unset($params[$name]); unset($params[$name]);
} elseif ($param->isDefaultValueAvailable()) { } elseif ($param->isDefaultValueAvailable()) {
$args[] = $actionParams[$name] = $param->getDefaultValue(); $args[] = $actionParams[$name] = $param->getDefaultValue();

Loading…
Cancel
Save