<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Config\Reader;
use Zend\Config\Exception;
use Zend\Json\Exception as JsonException;
use Zend\Json\Json as JsonFormat;
/**
* JSON config reader.
*/
class Json implements ReaderInterface
{
/**
* Directory of the JSON file
*
* @var string
*/
protected $directory;
/**
* fromFile(): defined by Reader interface.
*
* @see ReaderInterface::fromFile()
* @param string $filename
* @return array
* @throws Exception\RuntimeException
*/
public function fromFile($filename)
{
if (!is_file($filename) || !is_readable($filename)) {
throw new Exception\RuntimeException(sprintf(
"File '%s' doesn't exist or not readable",
$filename
));
}
$this->directory = dirname($filename);
try {
$config = JsonFormat::decode(file_get_contents($filename), JsonFormat::TYPE_ARRAY);
} catch (JsonException\RuntimeException $e) {
throw new Exception\RuntimeException($e->getMessage());
}
return $this->process($config);
}
/**
* fromString(): defined by Reader interface.
*
* @see ReaderInterface::fromString()
* @param string $string
* @return array|bool
* @throws Exception\RuntimeException
*/
public function fromString($string)
{
if (empty($string)) {
return array();
}
$this->directory = null;
try {
$config = JsonFormat::decode($string, JsonFormat::TYPE_ARRAY);
} catch (JsonException\RuntimeException $e) {
throw new Exception\RuntimeException($e->getMessage());
}
return $this->process($config);
}
/**
* Process the array for @include
*
* @param array $data
* @return array
* @throws Exception\RuntimeException
*/
protected function process(array $data)
{
foreach ($data as $key => $value) {
if (is_array($value)) {
$data[$key] = $this->process($value);
}
if (trim($key) === '@include') {
if ($this->directory === null) {
throw new Exception\RuntimeException('Cannot process @include statement for a JSON string');
}
$reader = clone $this;
unset($data[$key]);
$data = array_replace_recursive($data, $reader->fromFile($this->directory . '/' . $value));
}
}
return $data;
}
}
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
|
|