я новичок в pimcore и создал класс объекта — вот фрагмент кода, который получит поле «title» при сохранении записи:
class MagentoBaseProduct extends Concrete {
public function getTitle () {
$preValue = $this->preGetValue("title");
if($preValue !== null && !\Pimcore::inAdmin()) {
return $preValue;
}
$data = $this->title;
return $data;
}
}
Мне было интересно, если есть получить весь объект так, чтобы я получил все поля в одном массиве (вместо того, чтобы получить каждое поле отдельно)?
Спасибо
Вы можете использовать возможности самоанализа 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
}
}
Следующее должно сделать трюк намного проще:
$data = [];
$myObj = \Object\MagentoBaseProduct::getById(123);
foreach($myObj->getClass()->getFieldDefinitions() as $fieldDefionition) {
$data[$fieldDefinition->getName()] = $myObj->getValueForFieldName($fieldDefinition->getName());
}