yes and if you find a resource or more styled example or post that can
clarify this further would be great

On Mon, May 16, 2011 at 9:48 PM, oscar balladares <liebegr...@gmail.com> wrote:
> Another issue that I run into is:
> Let's say we have object A, and object A has refernce to Object B, both are
> entities instances, and reference of B is actually a proxy.
> This is the case when retrieving A with the entity manager. The reference of
> Object B is a doctrine proxy of Object B actually.
> So when serializing A, reference to B will be set to NULL. And this
> behaviour is explained in Doctrine Docs. They advice to not to
> serialize Entities (that are being managed by an entity manager).
> Now I'm facing this problem. Even using \Serializable interface. I read
> about a guy that hacked the source code of doctrine (proxies) to
> allow serialization but never explained how.
> So my big question is: If serializing entities is not adviced, how can I
> solve my use case?
> I'm implementing a shopping cart, and serializing products entities
> instances and saving them in a Session variable.
> I hate using arrays when I could achive the same with POO.
> But, I must remark that this is a Doctrine/PHP issue not a Symfony Framework
> related one.
> I'll keep searching. Any usefull information will be posted here to help
> someone ;)
> 2011/5/16 Luis Cordova <cordo...@gmail.com>
>>
>> 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
>
> --
> 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