Skip to content

Commit

Permalink
Raise an exception when Hash::get() receives invalid parameters
Browse files Browse the repository at this point in the history
I'm not sure on whether this is a problem with my local app but I have
seen it a couple of times in a couple of projects: Warning (2): Invalid
argument supplied for foreach() [CORE/Cake/Utility/Hash.php, line 52]

I think Hash::get should be able to handle this better rather than
throwing an error in a core Util file.

Refs #3754
  • Loading branch information
voycey authored and markstory committed Jun 25, 2014
1 parent 6bacc5b commit 239af03
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion lib/Cake/Utility/Hash.php
Expand Up @@ -38,6 +38,7 @@ class Hash {
* @param string|array $path The path being searched for. Either a dot
* separated string, or an array of path segments.
* @param mixed $default The return value when the path does not exist
* @throws InvalidArgumentException
* @return mixed The value fetched from the array, or null.
* @link http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::get
*/
Expand All @@ -48,15 +49,21 @@ public static function get(array $data, $path, $default = null) {
if (is_string($path) || is_numeric($path)) {
$parts = explode('.', $path);
} else {
$parts = $path;
if (!is_array($path)) {
throw new InvalidArgumentException(__d('cake_dev', 'Invalid Parameter %s, should be dot separated path or array.', $path));
}

$parts = $path;
}

foreach ($parts as $key) {
if (is_array($data) && isset($data[$key])) {
$data =& $data[$key];
} else {
return $default;
}
}

return $data;
}

Expand Down

0 comments on commit 239af03

Please sign in to comment.