mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-01 20:19:42 +08:00
Merge pull request #13216 from yiisoft/arrayhelper-error
fix ArrayHelper::getValue() to throw exception on invalid input
This commit is contained in:
@ -27,6 +27,7 @@ Yii Framework 2 Change Log
|
||||
- Bug #12879: Console progress bar was not working properly in Windows terminals (samdark, kids-return)
|
||||
- Bug #12880: Fixed `yii\behaviors\AttributeTypecastBehavior` marks attributes with `null` value as 'dirty' (klimov-paul)
|
||||
- Bug #12904: Fixed lowercase table name in migrations (zlakomanoff)
|
||||
- Bug #12927: `ArrayHelper::getValue()` did not throw exception if the input was neither an object nor an array, even though it was documented (cebe)
|
||||
- Bug #12939: Hard coded table names for MSSQL in RBAC migration (arogachev)
|
||||
- Bug #12974: Fixed incorrect order of migrations history in case `yii\console\controllers\MigrateController::$migrationNamespaces` is in use (evgen-d, klimov-paul)
|
||||
- Bug #13071: Help option for commands was not working in modules (arogachev, haimanman)
|
||||
|
||||
@ -178,10 +178,15 @@ class BaseArrayHelper
|
||||
* The possibility to pass an array of keys is available since version 2.0.4.
|
||||
* @param mixed $default the default value to be returned if the specified array key does not exist. Not used when
|
||||
* getting value from an object.
|
||||
* @return mixed the value of the element if found, default value otherwise
|
||||
* @return mixed the value of the element if found, default value otherwise.
|
||||
* @throws InvalidParamException if $array is neither an array nor an object.
|
||||
*/
|
||||
public static function getValue($array, $key, $default = null)
|
||||
{
|
||||
if (!is_array($array) && !is_object($array)) {
|
||||
throw new InvalidParamException('Argument passed to getValue() must be an array or object.');
|
||||
}
|
||||
|
||||
if ($key instanceof \Closure) {
|
||||
return $key($array, $default);
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
namespace yiiunit\framework\helpers;
|
||||
|
||||
use yii\base\InvalidParamException;
|
||||
use yii\base\Object;
|
||||
use yii\helpers\ArrayHelper;
|
||||
use yiiunit\TestCase;
|
||||
@ -734,6 +735,36 @@ class ArrayHelperTest extends TestCase
|
||||
$this->assertEquals(23, ArrayHelper::getValue($arrayObject, 'nonExisting'));
|
||||
}
|
||||
|
||||
public function invalidArgumentProvider()
|
||||
{
|
||||
return [
|
||||
[null],
|
||||
[false],
|
||||
[true],
|
||||
[42],
|
||||
[''],
|
||||
['not an object'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider invalidArgumentProvider
|
||||
* @expectedException \yii\base\InvalidParamException
|
||||
*/
|
||||
public function testGetValueInvalidArgumentWithoutDefaultValue($arg)
|
||||
{
|
||||
ArrayHelper::getValue($arg, 'test');
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider invalidArgumentProvider
|
||||
* @expectedException \yii\base\InvalidParamException
|
||||
*/
|
||||
public function testGetValueInvalidArgumentWithDefaultValue($arg)
|
||||
{
|
||||
ArrayHelper::getValue($arg, 'test', 'default');
|
||||
}
|
||||
|
||||
public function testIsAssociative()
|
||||
{
|
||||
$this->assertFalse(ArrayHelper::isAssociative('test'));
|
||||
|
||||
Reference in New Issue
Block a user