someone has to write about this case more clearly to explain to all This example is perfect, although one more could be added
Even though is not sf2 related specifically I think that it has to be explained since we are going to run into these kind of problems Thanks On Mon, May 16, 2011 at 10:43 AM, oscar balladares <liebegr...@gmail.com> wrote: > 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://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 > -- 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