Yes, you are right. I hadn't try out the ->detach() method :P Sorry. I saw a
tutorial that seemed very convincing :P (it was very late when posted last
email and I didn't try it till now).

My apologies :F


2011/5/16 Marco Pivetta <ocram...@gmail.com>

> Careful! The entity manager's detach method does not return anything!
>
> Marco Pivetta
> @Ocramius <http://twitter.com/Ocramius>
> http://marco-pivetta.com
>
>
>
> On 16 May 2011 08:55, oscar balladares <liebegr...@gmail.com> wrote:
>
>> According what I have read so far, serialize/unserialize $entities with
>> proxies associations is not advised.
>>
>> And of course, if you are saving objects in session() vars, it is an
>> innecesary load to save proxies information.
>>
>> So, it is adviced to detach proxies from entities (in case where entites
>> are retrieved with the entity_manager).
>>
>> For example:
>>
>> public function someControllerAction($product_id)
>> {
>>     $product = $em->find('Vendor\someBundle\Entity\Product', $product_id);
>>
>>     //If you need to save the $product object in a session var, for
>> example in a shopping cart implementation, which is actually the one that
>>     // lead me to the issue/solution in first place.
>>
>>     //so, to detach proxy information from $product you must:
>>
>>     $product = $em->detach($product);
>>
>>     //then serialize it and save it in a session var.
>> }
>>
>>
>> If during unserialization you need the proxy information back, you should
>>
>> $product = unserialize($SerializedProductContainer);
>> $product = $em->merge($product);
>>
>> Then you should be able to use proxy information of $product to retrieve
>> associated entities (Lazy load).
>>
>>  2011/5/16 oscar balladares <liebegr...@gmail.com>
>>
>>> Hi Luis, I solved the problem.
>>>
>>> Before making the summary I must point that Tim was reffering to what I
>>> thoght was "Serializable" about erroneously, sorry, my fault :D
>>>
>>> What I found (I have to start reading docs more deeply :P):
>>>
>>> The PHP bible says:
>>>
>>> "serialize() checks if your class has a function with the magic
>>> name __sleep. If so, that function is executed prior to any serialization.
>>> It can clean up the object and is supposed to return an array with the names
>>> of all variables of that object that should be serialized. If the method
>>> doesn't return anything then NULL is serialized and E_NOTICE is issued."
>>>
>>> E_NOTICE  is what I was getting in dev enviroment when trying to
>>> serialize an entity object that has reference to another entity object (due
>>> to associations). The serializations succeeded but I was getting that buggy
>>> message >:(
>>>
>>> The PHP bible says:
>>>
>>> "It is not possible for __sleep to return names of private properties in
>>> parent classes. Doing this will result in an E_NOTICE level error. Instead
>>> you may use the Serializableinterface."
>>>
>>> So I found that Doctrine (I think in proxies) use the magic function
>>> "__sleep()", so "serialize()" function exectues _sleep() method first, and
>>> expect it to return the object's properties, but if they are private it will
>>> fail, so if you change them to protected it will succeed.
>>>
>>> But changing properties scope is clumsy. \Serializable interface is the
>>> solution, and this is the "how" IMHO :D
>>>
>>> Class object implements \Serializable
>>> {
>>>   private $name;
>>>   private $address = array();
>>>
>>>   public function serialize()
>>>   {
>>>      return $data = array('name' => $this->name, 'address' =>
>>> $this->address;
>>>   }
>>>
>>>   public function unserialize($serialized)
>>>   {
>>>     $data = unserialize($serialized);
>>>     $this->name = $data['name'];
>>>     $this->address = $data['address'];
>>>   }
>>>
>>>   //setters and getters for $name and $address
>>>
>>> }
>>> Class object must implement \Serializable, this way when
>>> serializing/unserializing the object, this will trigger the look for its two
>>> abstract implementation methods: serialize() and unserialize()
>>>
>>> This way, "serialize" will have access to private members for
>>> serialization, and when "unserialize" will look for the object's method
>>> "unserialize" and will set unserialized $data to its private members.
>>>
>>> Both methods are like bridges to the private members.
>>>
>>> Notice that if Object A has a reference to Object B (like in
>>> associations) Object B has to implement \Serializabe as well.
>>>
>>> And hope this help someone when having this same issue (that has nothing
>>> to do with the framework itself, but PHP )
>>>
>>> Regards!
>>>
>>> 2011/5/15 Luis Cordova <cordo...@gmail.com>
>>>
>>>> nobody is doubting that Tim
>>>>
>>>> On Sun, May 15, 2011 at 7:48 PM, Tim Nagel <t...@nagel.com.au> wrote:
>>>> > They're talking about:
>>>> http://php.net/manual/en/class.serializable.php
>>>> >
>>>> > Not the Serializer component in Symfony2.
>>>> >
>>>> >
>>>> > t
>>>> >
>>>> >
>>>> > On Mon, May 16, 2011 at 08:52, oscar balladares <liebegr...@gmail.com>
>>>> wrote:
>>>> >> I'm having this problem too. Core Devs suggest to implement
>>>> Serializable
>>>> >> interface.
>>>> >> Symfony has Serializer classes and Interfaces, but I still dont know
>>>> how to
>>>> >> implement it/them.
>>>> >> If you are lucky, please share what you have found, if any.
>>>> >> Regards!
>>>> >>
>>>> >> 2011/5/11 Luis Cordova <cordo...@gmail.com>
>>>> >>>
>>>> >>> right but this was not what was happening.
>>>> >>> I had a chain of entities, and they all were entities, regular
>>>> POPOs.
>>>> >>> And I had to implement serialize method for one of them for this
>>>> thing
>>>> >>> to work.
>>>> >>>
>>>> >>> On Wed, May 11, 2011 at 2:19 AM, Marco Pivetta <ocram...@gmail.com>
>>>> wrote:
>>>> >>> > The ORM uses proxy classes internally. Thus, while working with
>>>> the
>>>> >>> > proxies
>>>> >>> > (when you load stuff from DB you usually receive a proxy from the
>>>> Object
>>>> >>> > Hydrator), you don't have access to private vars defined in your
>>>> >>> > entities.
>>>> >>> > That's why serialization of a proxy fails (and you should not
>>>> serialize
>>>> >>> > proxies! detach them from the entity manager first to get a clean
>>>> POPO!)
>>>> >>> >
>>>> >>> > Marco Pivetta
>>>> >>> > @Ocramius
>>>> >>> > http://marco-pivetta.com
>>>> >>> >
>>>> >>> >
>>>> >>> >
>>>> >>> > On 11 May 2011 01:10, Christophe COEVOET <s...@notk.org> wrote:
>>>> >>> >>
>>>> >>> >> Le 10/05/2011 13:25, AndyPI a écrit :
>>>> >>> >>>
>>>> >>> >>> Don't know if it helps, but changing my variables from 'private'
>>>> to
>>>> >>> >>> 'protected' in Symfony2 entities removed this problem for me.
>>>> >>> >>>
>>>> >>> >>> The Symfony2 docs use protected in their examples, but the
>>>> console
>>>> >>> >>> generates variables as private. Something to look at?
>>>> >>> >>
>>>> >>> >> The Doctrine doc advices to use the \Serializable interface:
>>>> >>> >>
>>>> >>> >>
>>>> http://www.doctrine-project.org/docs/orm/2.0/en/reference/architecture.html
>>>> >>> >>
>>>> >>> >> --
>>>> >>> >> Christophe | Stof
>>>> >>> >>
>>>> >>> >> --
>>>> >>> >> If you want to report a vulnerability issue on symfony, please
>>>> send it
>>>> >>> >> to
>>>> >>> >> security at symfony-project.com
>>>> >>> >>
>>>> >>> >> You received this message because you are subscribed to the
>>>> Google
>>>> >>> >> Groups "symfony users" group.
>>>> >>> >> To post to this group, send email to
>>>> symfony-users@googlegroups.com
>>>> >>> >> To unsubscribe from this group, send email to
>>>> >>> >> symfony-users+unsubscr...@googlegroups.com
>>>> >>> >> For more options, visit this group at
>>>> >>> >> http://groups.google.com/group/symfony-users?hl=en
>>>> >>> >
>>>> >>> > --
>>>> >>> > If you want to report a vulnerability issue on symfony, please
>>>> send it
>>>> >>> > to
>>>> >>> > security at symfony-project.com
>>>> >>> >
>>>> >>> > You received this message because you are subscribed to the Google
>>>> >>> > Groups "symfony users" group.
>>>> >>> > To post to this group, send email to
>>>> symfony-users@googlegroups.com
>>>> >>> > To unsubscribe from this group, send email to
>>>> >>> > symfony-users+unsubscr...@googlegroups.com
>>>> >>> > For more options, visit this group at
>>>> >>> > http://groups.google.com/group/symfony-users?hl=en
>>>> >>> >
>>>> >>>
>>>> >>> --
>>>> >>> If you want to report a vulnerability issue on symfony, please send
>>>> it to
>>>> >>> security at symfony-project.com
>>>> >>>
>>>> >>> You received this message because you are subscribed to the Google
>>>> >>> Groups "symfony users" group.
>>>> >>> To post to this group, send email to symfony-users@googlegroups.com
>>>> >>> To unsubscribe from this group, send email to
>>>> >>> symfony-users+unsubscr...@googlegroups.com
>>>> >>> For more options, visit this group at
>>>> >>> http://groups.google.com/group/symfony-users?hl=en
>>>> >>
>>>> >> --
>>>> >> If you want to report a vulnerability issue on symfony, please send
>>>> it to
>>>> >> security at symfony-project.com
>>>> >>
>>>> >> You received this message because you are subscribed to the Google
>>>> >> Groups "symfony users" group.
>>>> >> To post to this group, send email to symfony-users@googlegroups.com
>>>> >> To unsubscribe from this group, send email to
>>>> >> symfony-users+unsubscr...@googlegroups.com
>>>> >> For more options, visit this group at
>>>> >> http://groups.google.com/group/symfony-users?hl=en
>>>> >>
>>>> >
>>>> > --
>>>> > If you want to report a vulnerability issue on symfony, please send it
>>>> to security at symfony-project.com
>>>> >
>>>> > You received this message because you are subscribed to the Google
>>>> > Groups "symfony users" group.
>>>> > To post to this group, send email to symfony-users@googlegroups.com
>>>> > To unsubscribe from this group, send email to
>>>> > symfony-users+unsubscr...@googlegroups.com
>>>> > For more options, visit this group at
>>>> > http://groups.google.com/group/symfony-users?hl=en
>>>> >
>>>>
>>>> --
>>>> If you want to report a vulnerability issue on symfony, please send it
>>>> to security at symfony-project.com
>>>>
>>>> You received this message because you are subscribed to the Google
>>>> Groups "symfony users" group.
>>>> To post to this group, send email to symfony-users@googlegroups.com
>>>> To unsubscribe from this group, send email to
>>>> symfony-users+unsubscr...@googlegroups.com
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/symfony-users?hl=en
>>>>
>>>
>>>
>>  --
>> If you want to report a vulnerability issue on symfony, please send it to
>> security at symfony-project.com
>>
>> You received this message because you are subscribed to the Google
>> Groups "symfony users" group.
>> To post to this group, send email to symfony-users@googlegroups.com
>> To unsubscribe from this group, send email to
>> symfony-users+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/symfony-users?hl=en
>>
>
>  --
> If you want to report a vulnerability issue on symfony, please send it to
> security at symfony-project.com
>
> You received this message because you are subscribed to the Google
> Groups "symfony users" group.
> To post to this group, send email to symfony-users@googlegroups.com
> To unsubscribe from this group, send email to
> symfony-users+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/symfony-users?hl=en
>

-- 
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en

Reply via email to