Thanks for your reply. Also I just have a quick chat with Jonathan. here the
copy :
Jonathan Wage ‣ sort of, it is a complicated issue
Jonathan Wage ‣ hence why we have that weird solution in place
Jonathan Wage ‣ it may not be an issue anymore
Jonathan Wage ‣ what was being worked around may be fixed by nw
Jonathan Wage ‣ now
Jonathan Wage ‣ i will have to do some looking
Thomas ‣ ok, great as for now the xml and yml version +
inheritance is quite broken.
Thomas ‣ and not usable
Jonathan Wage ‣ its usable just as long as you write your own
entities
Jonathan Wage ‣ and dont try and generate anything
Jonathan Wage ‣ b/c thats all it is used for
Jonathan Wage ‣ is to generate your entities
Thomas ‣ yes I add extra field inside the xml files
Thomas ‣ then run the generate
Thomas ‣ and with the change I made => boom
Jonathan Wage ‣ the problem is this feature ws not meant to be
used like that
Jonathan Wage ‣ its not like you change your mapping, regenerate
Jonathan Wage ‣ like in symfony1
Jonathan Wage ‣ the feature is meant to be a import from an old project
Thomas ‣ ok, but It works withou inheritance
Jonathan Wage ‣ with doctrine2, you write oyur domain in php
code
Jonathan Wage ‣ i know
Jonathan Wage ‣ because in Doctrine2, the inheritance is not mapped
Jonathan Wage ‣ it is read at runtime from the classes
Jonathan Wage ‣ and cached in the ClassMetadata instances
Thomas ‣ ok then what the point of the xml or yml then ?
Thomas ‣ if at the end we need to code property and method
Jonathan Wage ‣ the point is to map your php classes that you
have written
Jonathan Wage ‣ you dont write your mapping files first
Jonathan Wage ‣ write your php classes first
Jonathan Wage ‣ the structure
Jonathan Wage ‣ inheritance
Jonathan Wage ‣ ionterfaces
Jonathan Wage ‣ this is object oriented domain modeling
Jonathan Wage ‣ not xml/yaml domain modeling
Thomas ‣ ok, then annotation is better then
Jonathan Wage ‣ you design with your object domain then map it
Jonathan Wage ‣ no
Jonathan Wage ‣ forget mapping in the first step of designing your
domain
Jonathan Wage ‣ write php classes
Jonathan Wage ‣ inject dependencies through constructure and setters
Jonathan Wage ‣ then, when you are done..map it to Doctirne2
Thomas ‣ ok, that point is maybe not clear in the documentation.
Jonathan Wage ‣ well it is clear that symfony2 and doctrine2
are not symfony1
Thomas ‣ but I get your point
Jonathan Wage ‣ and we've tried to say its not like sf1 and d1
Jonathan Wage ‣ where you work from the database
Jonathan Wage ‣ and tables
Thomas ‣ I get it from the wrong side
Jonathan Wage ‣ then generate your domain
Jonathan Wage ‣ you just design in regular old php code
Jonathan Wage ‣ its not hard to class
Jonathan Wage ‣ to write a class
Jonathan Wage ‣ class User { private $id; private $username; }
Jonathan Wage ‣ it doesnt have to work 100% you just design
Jonathan Wage ‣ lay out your domain
Jonathan Wage ‣ when you think in terms of tables and columns
Jonathan Wage ‣ instead of objects and depdencies
Jonathan Wage ‣ your design is going to suck
Thomas ‣ yes I get that
Jonathan Wage ‣ so we stil have a problem in the code that
could be better
Jonathan Wage ‣ the issue is Doctrine2 reads the inheritance of classes
using php reflection
Jonathan Wage ‣ at runtime and caches it in the metadata
Jonathan Wage ‣ so when the class does not exist
Jonathan Wage ‣ the class metadata loading fails
Jonathan Wage ‣ when you try and generate the class the first time
Thomas ‣ ok can I share this chat on the mailing list ?
Jonathan Wage ‣ ya
Thomas ‣ thanks
On 22 nov. 2010, at 17:01, Benjamin Eberlei wrote:
>
> No thats wrong. XML and YML are stable.
>
> What is not supported is XML,YML AND EntityGenerator. You are perfectly
> fine when writing the entity code yourself.
>
> The second problem is actually the same with regard to the
> EntityGenerator.
>
> Just keep in mind "inheritance + EntityGenerator = not (fully) supported".
> There is actually code generated, but you have to work on it a bit
> manually
> to get it working.
>
> greetings,
> Benjamin
>
> On Mon, 22 Nov 2010 16:45:29 +0100, Thomas Rabaix
> <[email protected]>
> wrote:
>> Ok, I just runs into these problems ...
>>
>> So, my understanding is
>> => that the yml and xml format is broken and there is no solution.
>> => The only stable solution is to use annotation.
>>
>> I don't get your explanation from the point 2. The class can be non
>> existant but the definition is set inside the XML or yml file. The
> solution
>> will be to add an extra check to load information from these files.
>>
>> On 22 nov. 2010, at 16:28, Benjamin Eberlei wrote:
>>
>>>
>>> Two problems:
>>>
>>> 1. Using XML and YAML Mapping you cannot perform Reflection on the not
>>> existing classes (in case of the EntityGenerator). Most of the Class
>>> Metadata code however relies on Reflection. This is why the
> disconnected
>>> stuff is necessary (maybe we should call it Unreflected).
>>>
>>> 2. The problem is inheritance hierachies cannot be generated from the
>>> YAML
>>> and XML metadata information (EntityGenerator). Its just not supported
>>> conceptually, because the mapping information is missing the
> information
>>> which class is parent to which other. That is why the
>>> DisconnectedClassMetadata is necessary to return an empty array()
> instead
>>> of trying to call get_parent_classes for a non existant class.
>>>
>>> greetings,
>>> Benjamin
>>>
>>> On Mon, 22 Nov 2010 15:52:52 +0100, Thomas Rabaix
>>> <[email protected]>
>>> wrote:
>>>> Hello,
>>>>
>>>> The DoctrineCommand::getBundleMetadatas function uses a
>>>> SymfonyDisconnectedClassMetadataFactory which failed to load
> information
>>>> from parent class as the
>>> DisconnectedClassMetadataFactory::getParentClass
>>>> always return an empty array. I have made a quick patch here, I don't
>>> want
>>>> to create a pull request as I don't know any side effect.
>>>>
>>>> I don't see the point of SymfonyDisconnectedClassMetadataFactory ...
> as
>>>> the class will never load all entities information.
>>>>
>>>> diff --git
>>> a/src/Symfony/Bundle/DoctrineBundle/Command/DoctrineCommand.php
>>>> b/src/Symfony/Bundle/DoctrineBundle/Command/DoctrineCommand.php
>>>> index da04e18..96e2e76 100644
>>>> --- a/src/Symfony/Bundle/DoctrineBundle/Command/DoctrineCommand.php
>>>> +++ b/src/Symfony/Bundle/DoctrineBundle/Command/DoctrineCommand.php
>>>> @@ -139,7 +139,8 @@ abstract class DoctrineCommand extends Command
>>>> $bundleMetadatas = array();
>>>> $entityManagers = $this->getDoctrineEntityManagers();
>>>> foreach ($entityManagers as $key => $em) {
>>>> - $cmf = new SymfonyDisconnectedClassMetadataFactory($em);
>>>> +// $cmf = new
> SymfonyDisconnectedClassMetadataFactory($em);
>>>> + $cmf = $em->getMetadataFactory();
>>>> $metadatas = $cmf->getAllMetadata();
>>>> foreach ($metadatas as $metadata) {
>>>>
>>>> @@ -151,19 +152,4 @@ abstract class DoctrineCommand extends Command
>>>>
>>>> return $bundleMetadatas;
>>>> }
>>>> -}
>>>> -
>>>> -class SymfonyDisconnectedClassMetadataFactory extends
>>>> DisconnectedClassMetadataFactory
>>>> -{
>>>> - /**
>>>> - * @override
>>>> - */
>>>> - protected function _newClassMetadataInstance($className)
>>>> - {
>>>> - if (class_exists($className)) {
>>>> - return new ClassMetadata($className);
>>>> - } else {
>>>> - return new ClassMetadataInfo($className);
>>>> - }
>>>> - }
>>>> }
>>>
>>> --
>>> 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 developers" group.
>>> To post to this group, send email to [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> For more options, visit this group at
>>> http://groups.google.com/group/symfony-devs?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 developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/symfony-devs?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 developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/symfony-devs?hl=en