[FLOW3-general] Mapping and adding objects - problem with properties
Ferdinand Kuhl
fcool at coolys.de
Wed Aug 31 23:37:04 CEST 2011
Ah! OneToMany is the key. Here it is a bit different. In your initialize you
have to:
/**
* Initialize createAction
*
* @return void
*/
public function initializeCreateAction() {
$this->arguments['newUser']-
>getPropertyMappingConfiguration()->forProperty('birthdate')-
>setTypeConverterOption('TYPO3\FLOW3\Property\TypeConverter\DateTimeConverter',
\TYPO3\FLOW3\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT,
'd-m-Y');
$this->arguments['newUser']->getPropertyMappingConfiguration()-
>forProperty('addresses')-
>setTypeConverterOption('TYPO3\FLOW3\Property\TypeConverter\PersistentObjectConverter',
\TYPO3\FLOW3\Property\TypeConverter\PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED,
true);
# $this->arguments['newUser']->getPropertyMappingConfiguration()-
>setTargetTypeForSubProperty('addresses',
'My\Package\Domain\Model\Address');
$this->arguments['newUser']-
>getPropertyMappingConfiguration()-
>allowModificationForSubProperty('addresses');
$this->arguments['newUser']-
>getPropertyMappingConfiguration()-
>allowModificationForSubProperty('addresses.0');
}
(see the 'addresses.0'!)
And for collection-arguments you have to add (at least) a constructor to
your entity:
public function __construct() {
$this->addresses = new \Doctrine\Common\Collections\ArrayCollection();
}
Another try, another luck!
Dawid Pacholczyk wrote:
> Guys I`ve uploaded my actual userController
> https://sourceforge.net/projects/flow3training/files/
>
> pls if you can have a look
>
> My problem is that. I`m creating Address object in initializeCreateAction
>
> What do I need to do in createAction ? I want to add address to the
> collection, add to Address object reference to the user and save the
> Address.
>
> I`m rly in the corner :(
>
> Best regards,
> Dawid Pacholczyk
>
> W dniu 2011-08-31 22:06, Dawid Pacholczyk pisze:
>> THe relation is @OneToMany
>>
>> One user many Addresses
>>
>> I have and ArrayCollection. I`ve managed to remap data from form as an
>> object. Now I need to add it to collection
>>
>> #1: Catchable Fatal Error: Argument 1 passed to
>> Doctrine\Common\Collections\ArrayCollection::__construct() must be an
>> array, object given, called in
>> D:
\wamp\www\directory\Packages\Framework\Doctrine\Classes\ORM\UnitOfWork.php
>> on line 416 and defined in
>> D:
\wamp\www\directory\Packages\Framework\Doctrine\Classes\Common\Collections\ArrayCollection.php
>> line 46
>>
>> but I`m getting further and further thanks to you :)
>>
>> W dniu 2011-08-31 21:50, Ferdinand Kuhl pisze:
>>> The lines I suggested you do work for me on many use cases.
>>>
>>> What kind of relation? OneToOne, OneToMany, ManyToOne or ManyToMany?
>>>
>>> Dawid Pacholczyk wrote:
>>>
>>>> I went this way
>>>>
>>>>
>>>> $this->arguments['newUser']->getPropertyMappingConfiguration()-
>>>> forProperty('address')-
>>>>
setTypeConverterOption('TYPO3\FLOW3\Property\TypeConverter\PersistentObjectConverter',
>>>>
>>>>
>>>
\TYPO3\FLOW3\Property\TypeConverter\PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED,
>>>
>>>> true);
>>>>
>>>> $this->arguments['newUser']->getPropertyMappingConfiguration()-
>>>> setTargetTypeForSubProperty('address',
>>>> 'My\Package\Domain\Model\Address');
>>>>
>>>> but I`m getting
>>>>
>>>> #1297759968: Exception while property mapping at property path
>>>> "address":Creation of objects not allowed. To enable this, you need to
>>>> set the PropertyMappingConfiguration Value
>>>> "CONFIGURATION_CREATION_ALLOWED" to TRUE
>>>>
>>>> W dniu 2011-08-31 19:06, Ferdinand Kuhl pisze:
>>>>> No Problem! I'm sure we all had similar experiences before. ;)
>>>>>
>>>>> What kind of relation?
>>>>>
>>>>> Basically you will have to do the following:
>>>>>
>>>>> FLUID-Form:
>>>>>
>>>>> <f:form.textfield property="address.city" />
>>>>> <f:form.textfield property="address.zip" />
>>>>> ...
>>>>>
>>>>> And in your Controller:
>>>>>
>>>>> public function initializeCreateAction() {
>>>>> $this->arguments['newUser']->getPropertyMappingConfiguration()-
>>>>>> allowCreationForSubProperty('address');
>>>>> }
>>>>>
>>>>> The rest should Flow3 do for you ;)
>>>>>
>>>>> Have a nice evening,
>>>>> Ferdinand
>>>>>
>>>>> Dawid Pacholczyk wrote:
>>>>>
>>>>>> OH MY GOD !!!!!!!!!!!!!!!!!!!!
>>>>>>
>>>>>> Sorry but I lost 2 days for that :/ I`ve changed the field, I`ve
>>>>>> changed
>>>>>> the getter but I had to forget about setter. Thank you Sebastian
>>>>>>
>>>>>> Ferdinand big thank you to you too for your time
>>>>>>
>>>>>> Guys, what about second question ? I have association with Address
>>>>>> object and I would like to put in my New.html 3 fields from address
>>>>>>
>>>>>> street, city, zip
>>>>>>
>>>>>> They are not User properties but Address properties. How can I in
>>>>>> initial method receive values and combine them to Address object and
>>>>>> invoke setAddress ?
>>>>>>
>>>>>> Best regards,
>>>>>> Dawid Pacholczyk
>>>>>>
>>>>>> W dniu 2011-08-31 18:38, Sebastian Kurfürst pisze:
>>>>>>> Hey,
>>>>>>>
>>>>>>>> public function setAge($birthdate) {
>>>>>>>> $this->birthdate = $birthdate;
>>>>>>>> }
>>>>>>>
>>>>>>> That's the error :-) It must be "public function setBirthdate".
>>>>>>>
>>>>>>> Greets,
>>>>>>> Sebastian
>>>>>>>
>>>>>
>>>
>>
More information about the FLOW3-general
mailing list