I would not take the FOSUserBundle as a reference. Although the abstraction seemed like a good idea in the beginning, I find that it makes the bundle overly complicated in practice. Some things which should be easy are quite involved.
Therefore, I believe we should re-think how to handle different persistence backends from scratch. Johannes Disclaimer: I have written the persistence abstraction of FOSUserBundle. On Wed, Mar 28, 2012 at 12:35 AM, Richard Shank <[email protected]> wrote: > On 03/27/2012 11:10 PM, Thomas Lundquist wrote: > > The model in MongoDB would inherit from > the model in the Model directory, but implement code specific to > MongoDB, ORM would also inherit from the model in the Model > directory, but implement ORM specific code. > > But here we disagree. Model should inherit the storage/persistence, not > like you describe it. > > Then I can always ask for and make new \Model\Foo in all my code and not > having to ponder how it's stored, Entity, Document, REST, whatever which > would be \Entity\Foo and then later \REST\Foo when it's changed. > > But this is a digression. > > > In a situation where you are writing a bundle that can be used across a > number of persistence types, its not really practical to have the model > inherit from the persistence. The way around this is to set up your > configuration so that you can select your persistence type in when your DI > is configured, select the configuration .xml for the selected persistence. > > app/config/config.yml > > my_awesome_bundle: > > db_driver: mongodb > > > MyAwesomeBundle\DependencyInjection\MyAwesomeExtension.php > > public function load($configs, $container) > { > ... > > $loader = new XmlFileLoader($container, new FileLocation(__DIR__ . > '/../Resources/config')); > if (!in_array(strtolower($config['db_drive]), array('mongodb', > 'orm'))) { > throw new \InvalidArugmentException(sprintf('What the hell kind of > db is %s', $config['db_drive'])); > } > $loader->load(sprintf('%s.xml', $config['db_driver']); > } > > > MyAwesomeBundle\Resources\config\mongodb.xml > > ... > > > <parameter > key="my_awesome.model.class">MyAwesomeBundle\MongoDB\Model.php</parameter> > > ... > > <service id="my_awesome.manager" class="MyAwesomeBundle\MongoDB\Manager.php"> > <argument>%my_awesome.model.class%</argument> > </service> > ... > > > Then you can use the container to get the class or use the manager with > the injected the class name > > $myAwesome = new $this->container->getParameter('my_awesome.model.class'); > > or > > $myAwesome = > $this->container->get('my_awesome.manager')->createMyAwesome(); > > > Look at https://github.com/FriendsOfSymfony/FOSUserBundle for a great > example of this. However, if you are not writing for a bundle, I'm not sure > how much it matters if you split the persistence part of the code from the > rest of the logic. > > -- > 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
