php TYPO3:字符串[]到对象[]的类型转换器?

8fq7wneg  于 2023-02-28  发布在  PHP
关注(0)|答案(1)|浏览(126)

现在我有一个类型转换器,从string到我的User::class,设置如下.顺便说一下,我只是把它用于User类,我有一些特定的User对象,我不想持久化,这就是为什么它只是反序列化他们:

class UserConverter extends AbstractTypeConverter
{
    protected $priority = 1;
    protected $sourceTypes = ['string'];
    protected $targetType = User::class;

    public function convertFrom($source, string $targetType,
                                array $convertedChildProperties = [],
                                PropertyMappingConfigurationInterface $configuration = null)
    {
        return unserialize($source);
    }
}

注册后,它按预期工作,例如,从Fluid表单到Controller操作,序列化对象自动反序列化。
这适用于单个属性,例如$report->user。我尝试对数组属性实现同样的效果,例如$report->users。因此我做了:

class UserArrayConverter extends AbstractTypeConverter
{
    protected $priority = 1;
    protected $sourceTypes = ['array'];
    protected $targetType = 'array';

    public function convertFrom($source, string $targetType,
                                array $convertedChildProperties = [],
                                PropertyMappingConfigurationInterface $configuration = null)
    {
        return ['TODO']; 
    }
}

但是在调试TODO行时,我发现执行线程永远不会到达它,当然,我得到的$report->users是字符串数组(序列化对象),而不是Users数组。
我应该如何创建TypeConverter,以便它可以将字符串数组转换为用户数组?

打印格式3:10.4,PHP:7.4

提前感谢!

h43kikqp

h43kikqp1#

您应该使用第一个属性Map器,并在initializeAction中进行操作。

public function initialize<Whatever>Action()
{
    $propertyMapping = $this->arguments
        ->getArgument('report')
        ->getPropertyMappingConfiguration();
    $propertyMapping->forProperty('users')->allowAllProperties();
    $propertyMapping->forProperty('users')->setTypeConverterOptions(
            UserConverter::class
        );
}

未经测试,但这应该是方法。

相关问题