Fix #20447: Fix behavior for yii\web\Controller::bindActionParams around mixed type

This commit is contained in:
Christina Reichel
2025-08-18 17:06:37 +02:00
committed by GitHub
parent 5468bca7bc
commit 5aabdd3a21
4 changed files with 20 additions and 0 deletions

View File

@ -14,6 +14,7 @@ Yii Framework 2 Change Log
- 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)
- 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
--------------------

View File

@ -208,6 +208,10 @@ class Controller extends \yii\base\Controller
if ($isArray) {
return [(array)$param, true];
}
$isMixed = $type->getName() === 'mixed';
if ($isMixed) {
return [$param, true];
}
if (is_array($param)) {
return [$param, false];

View File

@ -254,6 +254,17 @@ class ControllerTest extends TestCase
list($foo) = $this->controller->bindActionParams($stringy, ['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];
$this->expectException('yii\web\BadRequestHttpException');
$this->expectExceptionMessage('Invalid data received for parameter "foo".');

View File

@ -24,4 +24,8 @@ class FakePhp7Controller extends Controller
public function actionStringy(?string $foo = null)
{
}
public function actionMixedParameter(mixed $foo)
{
}
}