2015-12-29 3 views
0

Я новичок в pimcore и создал класс объекта - вот фрагмент кода, который получит «название» поле при сохранении записи:pimcore Класс объекта: получать все данные

class MagentoBaseProduct extends Concrete { 

    public function getTitle() { 
     $preValue = $this->preGetValue("title"); 
     if($preValue !== null && !\Pimcore::inAdmin()) { 
      return $preValue; 
     } 
     $data = $this->title; 
     return $data; 
    } 
} 

я был интересно, если вам нужно получить весь объект, чтобы я получил все поля в одном массиве (вместо того, чтобы получать каждое поле отдельно)?

благодарит

+0

из любопытства, что было бы UseCase для этого? – GNi33

ответ

1

Вы можете использовать возможности интроспекции PHP, чтобы получить список добытчиками в объекте, то доступ к каждому поглотитель, в свою очередь, чтобы получить значения и построить массив из этого. Помните, что значения могут быть не просто строками - это могут быть другие объекты, коллекции полей или что-то еще, что позволяет Pimcore.

$myObj = \Object\MagentoBaseProduct::getById(123); 
$reflection = new \ReflectionClass($myObj); 
$methods = $reflection->getMethods(ReflectionMethod::IS_PUBLIC); 

foreach ($methods as $method) { 
    $methodName = $method->getName(); 
    if (substr($methodName, 0, 3) == 'get') { 
     // do stuff to add to array here 
    } 
} 

http://php.net/manual/en/book.reflection.php

1

Следующая следует сделать трюк гораздо проще:

$data = []; 
$myObj = \Object\MagentoBaseProduct::getById(123); 
foreach($myObj->getClass()->getFieldDefinitions() as $fieldDefionition) { 
    $data[$fieldDefinition->getName()] = $myObj->getValueForFieldName($fieldDefinition->getName()); 
} 
Смежные вопросы