gpt4 book ai didi

php - Pimcore:通过包含类名的字符串创建命名空间对象

转载 作者:行者123 更新时间:2023-12-04 16:54:39 27 4
gpt4 key购买 nike

我在 Pimcore 中开发了一个区域,允许我们从列表中选择 Pimcore 对象分类,并将其转换为 HTML 可呈现形式。

我想通过在后端将成功提交的对象捕获为对象来增加此功能,但是我似乎无法使用标准的 PHP 方法按类名创建对象。

我究竟做错了什么? Pimcore 是否以不同的方式处理这个问题?

接受的答案编辑:

我稍微修改了代码以反射(reflect)已接受答案中的建议。如前所述,重要的是要记住,虽然类名的首字母可以小写,但它们的实际命名空间标识符使用首字母大写,这是我的代码中断的地方。

例如:$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();
}

}

最佳答案

您的对象类名称可能以小写开头,但实际类始终以大写开头。

这应该可以解决您的问题:

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

关于php - Pimcore:通过包含类名的字符串创建命名空间对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593689/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com