This commit is contained in:
mdmunir
2015-10-03 23:00:46 +07:00
parent 3ab36501c2
commit 3accf52ddb
3 changed files with 28 additions and 5 deletions

View File

@ -113,23 +113,23 @@ class Controller extends \yii\base\Controller
$args = []; $args = [];
$missing = []; $missing = [];
foreach ($method->getParameters() as $i => $param) { foreach ($method->getParameters() as $param) {
if (($class = $param->getClass()) !== null) { if (($class = $param->getClass()) !== null) {
$name = $param->getName(); $name = $param->getName();
$className = $class->getName(); $className = $class->getName();
if (Yii::$app->has($name) && ($obj = Yii::$app->get($name)) instanceof $className) { if (Yii::$app->has($name) && ($obj = Yii::$app->get($name)) instanceof $className) {
$args[$i] = $obj; $args[] = $obj;
} else { } else {
$args[$i] = Yii::$container->get($className); $args[] = Yii::$container->get($className);
} }
continue; continue;
} }
$value = array_shift($params); $value = array_shift($params);
if (isset($value)) { if (isset($value)) {
$args[$i] = $param->isArray() ? preg_split('/\s*,\s*/', $value) : $value; $args[] = $param->isArray() ? preg_split('/\s*,\s*/', $value) : $value;
} else { } else {
if ($param->isDefaultValueAvailable()) { if ($param->isDefaultValueAvailable()) {
$args[$i] = $param->getDefaultValue(); $args[] = $param->getDefaultValue();
} else { } else {
$missing[] = $param->getName(); $missing[] = $param->getName();
} }
@ -140,6 +140,10 @@ class Controller extends \yii\base\Controller
throw new Exception(Yii::t('yii', 'Missing required arguments: {params}', ['params' => implode(', ', $missing)])); throw new Exception(Yii::t('yii', 'Missing required arguments: {params}', ['params' => implode(', ', $missing)]));
} }
// #9823
foreach ($params as $value) {
$args[] = $value;
}
return $args; return $args;
} }

View File

@ -78,9 +78,18 @@ class ControllerTest extends TestCase
$result = $controller->runAction('aksi6', $params); $result = $controller->runAction('aksi6', $params);
$this->assertEquals(['mdmunir', false, true], $result); $this->assertEquals(['mdmunir', false, true], $result);
$params = ['arg1', 'arg2', 'arg3'];
$result = $controller->runAction('aksi8', $params);
$this->assertEquals($params, $result);
$params = ['arg1', 'arg2', 'arg3'];
$result = $controller->runAction('aksi9', $params);
$this->assertEquals(['arg1', 'arg2', Yii::$app->quxApp, 'arg3'], $result);
$params = ['avaliable']; $params = ['avaliable'];
$message = Yii::t('yii', 'Missing required arguments: {params}', ['params' => implode(', ', ['missing'])]); $message = Yii::t('yii', 'Missing required arguments: {params}', ['params' => implode(', ', ['missing'])]);
$this->setExpectedException('yii\console\Exception', $message); $this->setExpectedException('yii\console\Exception', $message);
$result = $controller->runAction('aksi7', $params); $result = $controller->runAction('aksi7', $params);
} }
} }

View File

@ -53,4 +53,14 @@ class FakeController extends Controller
{ {
} }
public function actionAksi8($arg1, $arg2)
{
return func_get_args();
}
public function actionAksi9($arg1, $arg2, QuxInterface $quxApp)
{
return func_get_args();
}
} }