Просмотр исходного кода

Se agrego el metodo __set, __get y __call

Your Name 7 лет назад
Родитель
Сommit
9b90eb46c0
1 измененных файлов с 38 добавлено и 10 удалено
  1. 38 10
      Entity/Traits/ExtraDataTrait.php

+ 38 - 10
Entity/Traits/ExtraDataTrait.php

@@ -12,14 +12,17 @@ trait ExtraDataTrait
      * @var string $extraData
      *
      * @ORM\Column(type="text", nullable=true)
-     * 
+     *
      * @Assert\Callback(
-     *  callback={"ExtraDataBundle\Validator\JSONValidator", "validate"}, 
+     *  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
@@ -31,13 +34,13 @@ trait ExtraDataTrait
 
     /**
      * @param string $extraData
-     * 
+     *
      * @return $this
      */
     public function setExtraData($extraData = null)
     {
         $this->extraData = $extraData;
-
+        $this->_extraData_array = json_decode($this->extraData, true);
         return $this;
     }
 
@@ -46,22 +49,25 @@ trait ExtraDataTrait
      */
     public function jsonExtraData()
     {
-        return json_decode($this->extraData, true);
+        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)
@@ -71,8 +77,30 @@ trait ExtraDataTrait
         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;
+        $this->extraData = $this->setJsonExtraData($extra);
+        return $this;
+    }
 }