123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- namespace ExtraDataBundle\Entity\Traits;
- use Doctrine\ORM\Mapping as ORM;
- use Symfony\Component\Validator\Constraints as Assert;
- trait ExtraDataTrait
- {
- /**
- * @var string $extraData
- *
- * @ORM\Column(type="text", nullable=true)
- *
- * @Assert\Callback(
- * callback={"ExtraDataBundle\Validator\JSONValidator", "validate"},
- * payload={"field"="extraData"}
- * )
- */
- private $extraData;
- /**
- * @var array Pasa el extra data a un array.
- */
- private $_extraData_array = null;
- /**
- * @return string
- */
- public function getExtraData()
- {
- return $this->extraData;
- }
- /**
- * @param string $extraData
- *
- * @return $this
- */
- public function setExtraData($extraData = null)
- {
- $this->extraData = $extraData;
- $this->_extraData_array = json_decode($this->extraData, true);
- return $this;
- }
- /**
- * @return array
- */
- public function jsonExtraData()
- {
- if ($this->_extraData_array == null) {
- $this->_extraData_array = json_decode($this->extraData, true);
- }
- return $this->_extraData_array;
- }
- /**
- * @param mixed $extraData
- *
- * @return ExtraDataTrait
- */
- public function setJsonExtraData($extraData)
- {
- return $this->setExtraData(json_encode($extraData));
- }
- /**
- * @param string $key
- *
- * @return mixed
- */
- public function getData($key)
- {
- $extraData = $this->jsonExtraData();
- $value = null;
- if (isset($extraData[$key])) {
- $value = $extraData[$key];
- }
- return $value;
- }
- public function __call($name, $arguments)
- {
- if (substr($name, 0, 3) == 'get') {
- return $this->__get(substr($name, 3));
- } else if (substr($name, 0, 3) == 'set') {
- return $this->__set(substr($name, 3), $arguments);
- } else {
- throw new \Exception("ExtraData __call not support call $name");
- }
- }
- public function __get($name)
- {
- return $this->getData($name);
- }
- public function __set($name, $arguments)
- {
- $extra = $this->jsonExtraData();
- $extra[$name] = $arguments[0];
- $this->setJsonExtraData($extra);
- return $this;
- }
- }
|