Pimcore\Model\Object\Objectbrick\Definition::save PHP Метод

save() публичный Метод

public save ( ) : void
Результат void
    public function save()
    {
        if (!$this->getKey()) {
            throw new \Exception("A object-brick needs a key to be saved!");
        }
        $definitionFile = $this->getDefinitionFile();
        $newClassDefinitions = [];
        $classDefinitionsToDelete = [];
        foreach ($this->classDefinitions as $cl) {
            if (!$cl['deleted']) {
                $newClassDefinitions[] = $cl;
            } else {
                $classDefinitionsToDelete[] = $cl;
            }
        }
        $this->classDefinitions = $newClassDefinitions;
        $infoDocBlock = $this->getInfoDocBlock();
        $this->cleanupOldFiles($definitionFile);
        $clone = clone $this;
        $clone->setDao(null);
        unset($clone->oldClassDefinitions);
        unset($clone->fieldDefinitions);
        $exportedClass = var_export($clone, true);
        $data = '<?php ';
        $data .= "\n\n";
        $data .= $infoDocBlock;
        $data .= "\n\n";
        $data .= "\nreturn " . $exportedClass . ";\n";
        \Pimcore\File::put($definitionFile, $data);
        $extendClass = "Object\\Objectbrick\\Data\\AbstractData";
        if ($this->getParentClass()) {
            $extendClass = $this->getParentClass();
            $extendClass = "\\" . ltrim($extendClass, "\\");
        }
        // create class
        $cd = '<?php ';
        $cd .= "\n\n";
        $cd .= $infoDocBlock;
        $cd .= "\n\n";
        $cd .= "namespace Pimcore\\Model\\Object\\Objectbrick\\Data;";
        $cd .= "\n\n";
        $cd .= "use Pimcore\\Model\\Object;";
        $cd .= "\n\n";
        $cd .= "class " . ucfirst($this->getKey()) . " extends " . $extendClass . "  {";
        $cd .= "\n\n";
        $cd .= 'public $type = "' . $this->getKey() . "\";\n";
        if (is_array($this->getFieldDefinitions()) && count($this->getFieldDefinitions())) {
            foreach ($this->getFieldDefinitions() as $key => $def) {
                $cd .= "public \$" . $key . ";\n";
            }
        }
        $cd .= "\n\n";
        if (is_array($this->getFieldDefinitions()) && count($this->getFieldDefinitions())) {
            foreach ($this->getFieldDefinitions() as $key => $def) {
                /**
                 * @var $def Object\ClassDefinition\Data
                 */
                $cd .= $def->getGetterCodeObjectbrick($this);
                $cd .= $def->getSetterCodeObjectbrick($this);
            }
        }
        $cd .= "}\n";
        $cd .= "\n";
        File::put($this->getPhpClassFile(), $cd);
        $this->createContainerClasses();
        $this->updateDatabase();
    }

Usage Example

Пример #1
0
 public function objectbrickUpdateAction()
 {
     try {
         $key = $this->getParam("key");
         if ($this->getParam("task") == "add") {
             // check for existing brick with same name with different lower/upper cases
             $list = new Object\Objectbrick\Definition\Listing();
             $list = $list->load();
             foreach ($list as $item) {
                 if (strtolower($key) === strtolower($item->getKey())) {
                     throw new \Exception("Brick with the same name already exists (lower/upper cases may be different)");
                 }
             }
         }
         // now we create a new definition
         $fc = new Object\Objectbrick\Definition();
         $fc->setKey($key);
         if ($this->getParam("values")) {
             $values = \Zend_Json::decode($this->getParam("values"));
             $fc->setParentClass($values["parentClass"]);
             $fc->setClassDefinitions($values["classDefinitions"]);
         }
         if ($this->getParam("configuration")) {
             $configuration = \Zend_Json::decode($this->getParam("configuration"));
             $configuration["datatype"] = "layout";
             $configuration["fieldtype"] = "panel";
             $layout = Object\ClassDefinition\Service::generateLayoutTreeFromArray($configuration, true);
             $fc->setLayoutDefinitions($layout);
         }
         $fc->save();
         $this->_helper->json(["success" => true, "id" => $fc->getKey()]);
     } catch (\Exception $e) {
         Logger::error($e->getMessage());
         $this->_helper->json(["success" => false, "message" => $e->getMessage()]);
     }
 }
All Usage Examples Of Pimcore\Model\Object\Objectbrick\Definition::save