mirror of
https://github.com/yiisoft/yii2.git
synced 2025-10-28 04:25:53 +08:00
Fix #20447: Fix behavior for yii\web\Controller::bindActionParams around mixed type
This commit is contained in:
committed by
GitHub
parent
5468bca7bc
commit
5aabdd3a21
@ -14,6 +14,7 @@ Yii Framework 2 Change Log
|
|||||||
- Bug #20459: Fix return type in `RequestParserInterface::parse` (max-s-lab)
|
- Bug #20459: Fix return type in `RequestParserInterface::parse` (max-s-lab)
|
||||||
- Bug #20475: Fix `Formatter` class `asScientific()` method for PHP `8.5` `sprintf` precision change (`6` to `0`) (terabytesoftw)
|
- Bug #20475: Fix `Formatter` class `asScientific()` method for PHP `8.5` `sprintf` precision change (`6` to `0`) (terabytesoftw)
|
||||||
- Enh #20480: Add PHPStan/Psalm annotations for `ServiceLocator::get` (max-s-lab)
|
- Enh #20480: Add PHPStan/Psalm annotations for `ServiceLocator::get` (max-s-lab)
|
||||||
|
- Bug #20447: Fix behavior for `yii\web\Controller::bindActionParams` around `mixed` type (chriscpty)
|
||||||
|
|
||||||
2.0.53 June 27, 2025
|
2.0.53 June 27, 2025
|
||||||
--------------------
|
--------------------
|
||||||
|
|||||||
@ -208,6 +208,10 @@ class Controller extends \yii\base\Controller
|
|||||||
if ($isArray) {
|
if ($isArray) {
|
||||||
return [(array)$param, true];
|
return [(array)$param, true];
|
||||||
}
|
}
|
||||||
|
$isMixed = $type->getName() === 'mixed';
|
||||||
|
if ($isMixed) {
|
||||||
|
return [$param, true];
|
||||||
|
}
|
||||||
|
|
||||||
if (is_array($param)) {
|
if (is_array($param)) {
|
||||||
return [$param, false];
|
return [$param, false];
|
||||||
|
|||||||
@ -254,6 +254,17 @@ class ControllerTest extends TestCase
|
|||||||
list($foo) = $this->controller->bindActionParams($stringy, ['foo' => '']);
|
list($foo) = $this->controller->bindActionParams($stringy, ['foo' => '']);
|
||||||
$this->assertSame('', $foo);
|
$this->assertSame('', $foo);
|
||||||
|
|
||||||
|
// make sure mixed type works
|
||||||
|
$params = ['foo' => 100];
|
||||||
|
$mixedParameter = new InlineAction('mixed-parameter', $this->controller, 'actionMixedParameter');
|
||||||
|
list($foo) = $this->controller->bindActionParams($mixedParameter, $params);
|
||||||
|
$this->assertSame(100, $foo);
|
||||||
|
$params = ['foo' => 'foobar'];
|
||||||
|
$mixedParameter = new InlineAction('mixed-parameter', $this->controller, 'actionMixedParameter');
|
||||||
|
list($foo) = $this->controller->bindActionParams($mixedParameter, $params);
|
||||||
|
$this->assertSame('foobar', $foo);
|
||||||
|
|
||||||
|
|
||||||
$params = ['foo' => 'oops', 'bar' => null];
|
$params = ['foo' => 'oops', 'bar' => null];
|
||||||
$this->expectException('yii\web\BadRequestHttpException');
|
$this->expectException('yii\web\BadRequestHttpException');
|
||||||
$this->expectExceptionMessage('Invalid data received for parameter "foo".');
|
$this->expectExceptionMessage('Invalid data received for parameter "foo".');
|
||||||
|
|||||||
@ -24,4 +24,8 @@ class FakePhp7Controller extends Controller
|
|||||||
public function actionStringy(?string $foo = null)
|
public function actionStringy(?string $foo = null)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function actionMixedParameter(mixed $foo)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user