<?php
namespace Cake\Database\Type;
use Cake\Database\Driver;
use Cake\Database\Type;
use Cake\Database\TypeInterface;
use Cake\Database\Type\BatchCastingInterface;
use InvalidArgumentException;
use PDO;
class JsonType extends Type implements TypeInterface, BatchCastingInterface
{
protected $_name;
public function __construct($name = null)
{
$this->_name = $name;
}
public function toDatabase($value, Driver $driver)
{
if (is_resource($value)) {
throw new InvalidArgumentException('Cannot convert a resource value to JSON');
}
return json_encode($value);
}
public function toPHP($value, Driver $driver)
{
return json_decode($value, true);
}
public function manyToPHP(array $values, array $fields, Driver $driver)
{
foreach ($fields as $field) {
if (!isset($values[$field])) {
continue;
}
$values[$field] = json_decode($values[$field], true);
}
return $values;
}
public function toStatement($value, Driver $driver)
{
return PDO::PARAM_STR;
}
public function marshal($value)
{
return $value;
}
}