[Flow] Copy an object
Carsten Bleicker
carsten at bleicker.de
Thu Apr 16 07:38:53 CEST 2015
You need to configure the configuration.
Just take a look at this: http://docs.typo3.org/flow/TYPO3FlowDocumentation/stable/TheDefinitiveGuide/PartIII/PropertyMapping.html#configuring-the-conversion-process
Mit sonnigem Gruß
Carsten Bleicker
----------------------
Carsten Bleicker
Wülfingstraße 1
42477 Radevormwald
E-Mail: carsten at bleicker.de
Web: www.bleicker.de
Twitter: @carstenbleicker
Jabber: cbleicker at jabber.ccc.de
Telefon: +49 (0)171-2690845
> Am 16.04.2015 um 07:28 schrieb David Sporer <david.sporer at gmail.com>:
>
> Thank you Carsten.
> I’ve tried your suggestion but it’s not yet working because if I create the connected objects like you suggested it gives me an error:
> „It is not allowed to map property „0“. You need to use $propertyMappingConfiguration->allowProperties(‚0‘) to enable mapping of this property.“
>
> This happens because the first entry of the array has index 0 which seems to be a problem.
>
> Can you help?
>
> Regards,
> David
>
>> Am 15.04.2015 um 09:40 schrieb Carsten Bleicker <carsten at bleicker.de>:
>>
>> i think you can not solve this in a generic way.
>> nobody knows if your application needs to just create a new collection of related objects
>> or do you need to copy each single collection item also.
>>
>> maybe you could try to get the properties you need for the copy project as a simple array.
>> and use the converter features to convert this array into a new object.
>>
>> f.e.
>>
>> class CopyService {
>>
>> /**
>> * @var \TYPO3\Flow\Property\PropertyMapper
>> * @Flow\Inject
>> */
>> protected $propertyMapper;
>>
>> /**
>> * @var \TYPO3\Flow\Property\PropertyMappingConfigurationBuilder
>> * @Flow\Inject
>> */
>> protected $propertyMappingConfigurationBuilder;
>>
>> /**
>> * @param FooObject $object
>> * @return FooObject
>> */
>> public function copyFooWithSameBarReferences(FooObject $object){
>> $properties = ObjectAccess::getGettableProperties($object);
>>
>> // maybe $object->bars contains collection of Baz
>> // and you want to use the same relations for the new object, just add their identifiers to the new collection
>> $properties['bars'] = [];
>> while($bar = $object->getBars()->current()){
>> $properties['bars'][] = $this->persistenceManager->getIdentifierByObject($bar);
>> $object->getBars()->next();
>> }
>>
>> // Configure what is allowed to map from $properties etc.
>> // Note: its incomplete at this point
>> $configuration = $this->propertyMappingConfigurationBuilder->build();
>> $configuration->allowAllProperties();
>>
>> return $this->propertyMapper->convert($properties, FooObject::class, $configuration);
>> }
>>
>> /**
>> * @param FooObject $object
>> * @return FooObject
>> */
>> public function copyFooWithNewBarReferences(FooObject $object){
>> $properties = ObjectAccess::getGettableProperties($object);
>>
>> // maybe $object->bars contains collection of Baz
>> // and you want to use the same relations for the new object, just add their identifiers to the new collection
>> $properties['bars'] = [];
>> while($bar = $object->getBars()->current()){
>> $properties['bars'][] = ObjectAccess::getGettableProperties($bar);
>> $object->getBars()->next();
>> }
>>
>> // Configure what is allowed to map from $properties etc.
>> // Note: its incomplete at this point
>> $configuration = $this->propertyMappingConfigurationBuilder->build();
>> $configuration->allowAllProperties();
>>
>> return $this->propertyMapper->convert($properties, FooObject::class, $configuration);
>> }
>>
>> }
>>
>>
>>
>>
>>> Am 15.04.2015 um 08:45 schrieb David Sporer <david.sporer at gmail.com>:
>>>
>>> Hi,
>>>
>>> I have a fairly complex model and I want to create a copyAction in my controller that basically duplicates the object.
>>> My first approach was to simply clone the original object with clone().
>>> The problem with this however is that the references to resources and other collections remain the same.
>>> If I clear collections of the copied resource the collection of the original resource is also cleared which I don’t want.
>>> Same thing for resources. Deleting the original object fails because the resource is referenced by the new object also.
>>>
>>> Do you have any best practices for doing such a thing?
>>> One approach that I guess would work is creating the copied object from scratch and also manually duplicating all connected objects but that wouldn’t be that easy and I guess there must be an easier way.
>>>
>>> Thanks,
>>> David
>>> _______________________________________________
>>> Flow mailing list
>>> Flow at lists.typo3.org
>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/flow
>>
>> _______________________________________________
>> Flow mailing list
>> Flow at lists.typo3.org
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/flow
>
> _______________________________________________
> Flow mailing list
> Flow at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/flow
More information about the Flow
mailing list