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