Pimcore: создание объектов с именами через строку, содержащую имя класса

Я разработал область в Pimcore, которая позволяет нам выбирать классификацию объектов Pimcore из списка и преобразовывать ее в форму HTML для визуализации.

Я хотел бы увеличить функциональность этого путем захвата успешных представлений в качестве объектов в бэкэнде, Однако я не могу использовать стандартный метод PHP для создания объекта по имени класса.

Что я делаю неправильно? Pimcore справляется с этим по-другому?


Принятый ответ

Я немного изменил код, чтобы отразить предложения из принятого ответа. Как уже отмечалось, важно помнить, что хотя имена классов могут иметь строчные первые буквы, их фактические идентификаторы в пространстве имен используют начальный регистр, в котором мой код нарушался.

Например:

$newObj_class выводил Pimcore\Model\Object\className

$newObj_class должно было Pimcore\Model\Object\ClassName

Обратите внимание на различие в className против ClassName

Вот ядро ​​области за работой файл view.php:

// Get a list of available classes...
$form_class = null;
$class_list = new Pimcore\Model\Object\ClassDefinition\Listing();
$class_list->load();

// Turn the class names into dropdown options...
$class_options = array();
foreach( $class_list->getClasses() as $class )
{
$class_options[] = array( $class->name, $class->name );
}

// Admin only code...
if( $this->editmode )
{
$formSource = $this->select(
'formClass',
array(
'store' => $class_options,
'reload' => true
)
);
echo
'<table>'.
'<tr><th>Form Source:</th><td>'.$formSource.'</td></tr>'.
// Additional config fields go here...
'</table>';

}

// Iterate over the classes...
foreach( $class_list->getClasses() as $class )
{
// Skip unselected classes...
if( $this->select( 'formClass' )->getValue() != $class->name )
{
continue;
}

// Handle form submissions...
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
// Create an object using the selected class...
$newObj_class = 'Pimcore\\Model\\Object\\'.ucfirst( (string)$this->select( 'formClass' ) );
$newObj = new $newObj_class();
// Assign field values to the object here...
$newObj->save();
}

}

1

Решение

Ваше имя класса объекта, вероятно, начинается со строчной буквы, но фактический класс всегда помечается прописными.

Это должно исправить вашу проблему:

$newClass = 'Pimcore\\Model\\Object\\' . ucfirst($this->select( 'formClass' )->getValue());
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]