Commit Graph

30 Commits

Author SHA1 Message Date
Fabien Potencier
8b8545895f [DoctrineBundle] fixed auto-mapping
When auto_mapping is true, you can avoid a bundle to be
automatically mapped by setting the value to false:

    auto_mapping: true
    mappings:
        BlogBundle: false

With the above configuration, all bundles will be
auto-mapped, but the BlogBundle won't be.

Bundles that are defined in mappings won't be
managed by the auto-mapping feature:

    auto_mapping: true
    mappings:
        BlogBundle: xml
2011-04-30 21:18:20 +02:00
Fabien Potencier
c846990459 [DoctrineBundle] added the possibility to disable a bundle when using auto_mapping
orm:
    auto_mapping: true
    mappings:
         FOSUserBundle: false
2011-04-27 17:41:36 +02:00
Fabien Potencier
dc85727b5a [DoctrineBundle] added an auto-mapping option to let Symfony register all enabled bundle mappings
Most of the time, you just want to register all your bundle mappings. It's a bit
tedious to do it by hand, not because of the amount of configuration you need to
type, but mainly because you can easily forget to do so
(also see https://github.com/symfony/symfony/pull/502).

So, setting auto_mapping to true allows Symfony to automatically register the mappings
it founds in the enabled bundles (default is false).

Even if auto_mapping is true, you can still define your mappings to add some more
or to override the defaults.

This change means that the default configuration that works most of the time for
most people is simple:

orm:
  auto_mapping: true
2011-04-27 17:41:36 +02:00
Fabien Potencier
71330e91d0 [DoctrineBundle] simplified code 2011-04-27 13:51:22 +02:00
Fabien Potencier
7395069b60 [DoctrineBundle] cleaned up code 2011-04-27 10:50:56 +02:00
Fabien Potencier
55f9e6fb99 [DoctrineBundle] tweaked various exceptions to make it clear that the issue is related to Doctrine 2011-04-27 10:37:01 +02:00
Fabien Potencier
631393e29d [DoctrineBundle] fixed CS 2011-04-27 10:15:03 +02:00
Fabien Potencier
e68f8f40b9 [DoctrineBundle] renamed DIC class parameters (they end with .class instead of _class to follow the convention of other bundles) 2011-04-26 12:22:22 +02:00
Fabien Potencier
0632327b77 removed data fixtures from core (moved to https://github.com/symfony/DoctrineFixturesBundle) 2011-04-22 11:47:16 +02:00
Ryan Weaver
9850ff8b6e [DoctrineAbstractBundle] Changing incorrect "static-php" references to "staticphp"
The end string refers to, for example, the parameter doctrine.orm.metadata.staticphp_class
2011-03-29 18:22:32 -05:00
Martin Hason
e441fc95a8 [AbstractDoctrineBundle] fixed typo 2011-03-16 11:33:21 +01:00
Christophe Coevoet
25521e7e86 [DoctrineAbstractBundle] Removed obsolete code as the normalization is now done by the Configuration classes 2011-03-10 10:53:50 +01:00
Fabien Potencier
8c423edfef replaced symfony-project.org by symfony.com 2011-03-06 12:40:06 +01:00
Pascal Borreli
64b50e1c46 [Doctrine*Bundle] Fixed Typo 2011-03-01 18:58:07 +01:00
Pascal Borreli
b9c2579f2b [DoctrineAbstractBundle] Fixed typo 2011-02-26 20:02:05 +01:00
Fabien Potencier
5c905beb13 moved common configuration classes to a new Config component 2011-02-13 22:31:50 +01:00
Fabien Potencier
b91f082be5 Revert "moved Resource to the Config component"
This reverts commit f53080860a.

Revert "[Router] config fixes"

This reverts commit 51beecc6f2.

Revert "moved duplicated files to a new Config component"

This reverts commit a8ec9b27f0.
2011-02-10 16:14:12 +01:00
Fabien Potencier
f53080860a moved Resource to the Config component 2011-02-10 16:07:42 +01:00
Fabien Potencier
e58a84eb09 added a FileLocator to DIC so that we can load resources like @BundleName/Resources/... 2011-02-10 00:44:02 +01:00
Bulat Shakirzyanov
97679e5bda [DoctrineAbstractBundle] added test for new Loader 2011-02-08 04:11:47 +01:00
Bulat Shakirzyanov
d447d22809 [DoctrineBundle, DoctrineAbstractBundle, DoctrineMongoDBBundle] added container aware fixture loader
Updated load data fixtures command in DoctrineMongoDBBundle to be identical to the one in DoctrineBundle
Created custom loader, that passes $container to all ContainerAware DataFixtures
2011-02-08 04:11:47 +01:00
Benjamin Eberlei
682e83585b [DoctrineBundle] Add new Command doctrine:mapping:info that allows to check what entities are mapped and if their metadata is specified correctly. Added exception when a mapping/bundle directory does not exist. 2011-01-22 19:48:10 +01:00
Fabien Potencier
6d1e91a1fa refactored bundle management
Before I explain the changes, let's talk about the current state.

Before this patch, the registerBundleDirs() method returned an ordered (for
resource overloading) list of namespace prefixes and the path to their
location. Here are some problems with this approach:

 * The paths set by this method and the paths configured for the autoloader
   can be disconnected (leading to unexpected behaviors);

 * A bundle outside these paths worked, but unexpected behavior can occur;

 * Choosing a bundle namespace was limited to the registered namespace
   prefixes, and their number should stay low enough (for performance reasons)
   -- moreover the current Bundle\ and Application\ top namespaces does not
   respect the standard rules for namespaces (first segment should be the
   vendor name);

 * Developers must understand the concept of "namespace prefixes" to
   understand the overloading mechanism, which is one more thing to learn,
   which is Symfony specific;

 * Each time you want to get a resource that can be overloaded (a template for
   instance), Symfony would have tried all namespace prefixes one after the
   other until if finds a matching file. But that can be computed in advance
   to reduce the overhead.

Another topic which was not really well addressed is how you can reference a
file/resource from a bundle (and take into account the possibility of
overloading). For instance, in the routing, you can import a file from a
bundle like this:

  <import resource="FrameworkBundle/Resources/config/internal.xml" />

Again, this works only because we have a limited number of possible namespace
prefixes.

This patch addresses these problems and some more.

First, the registerBundleDirs() method has been removed. It means that you are
now free to use any namespace for your bundles. No need to have specific
prefixes anymore. You are also free to store them anywhere, in as many
directories as you want. You just need to be sure that they are autoloaded
correctly.

The bundle "name" is now always the short name of the bundle class (like
FrameworkBundle or SensioCasBundle). As the best practice is to prefix the
bundle name with the vendor name, it's up to the vendor to ensure that each
bundle name is unique. I insist that a bundle name must be unique. This was
the opposite before as two bundles with the same name was how Symfony2 found
inheritance.

A new getParent() method has been added to BundleInterface. It returns the
bundle name that the bundle overrides (this is optional of course). That way,
there is no ordering problem anymore as the inheritance tree is explicitely
defined by the bundle themselves.

So, with this system, we can easily have an inheritance tree like the
following:

FooBundle < MyFooBundle < MyCustomFooBundle

MyCustomFooBundle returns MyFooBundle for the getParent() method, and
MyFooBundle returns FooBundle.

If two bundles override the same bundle, an exception is thrown.

Based on the bundle name, you can now reference any resource with this
notation:

    @FooBundle/Resources/config/routing.xml
    @FooBundle/Controller/FooController.php

This notation is the input of the Kernel::locateResource() method, which
returns the location of the file (and of course it takes into account
overloading).

So, in the routing, you can now use the following:

    <import resource="@FrameworkBundle/Resources/config/internal.xml" />

The template loading mechanism also use this method under the hood.

As a bonus, all the code that converts from internal notations to file names
(controller names: ControllerNameParser, template names: TemplateNameParser,
resource paths, ...) is now contained in several well-defined classes. The
same goes for the code that look for templates (TemplateLocator), routing
files (FileLocator), ...

As a side note, it is really easy to also support multiple-inheritance for a
bundle (for instance if a bundle returns an array of bundle names it extends).
However, this is not implemented in this patch as I'm not sure we want to
support that.

How to upgrade:

 * Each bundle must now implement two new mandatory methods: getPath() and
   getNamespace(), and optionally the getParent() method if the bundle extends
   another one. Here is a common implementation for these methods:

    /**
     * {@inheritdoc}
     */
    public function getParent()
    {
        return 'MyFrameworkBundle';
    }

    /**
     * {@inheritdoc}
     */
    public function getNamespace()
    {
        return __NAMESPACE__;
    }

    /**
     * {@inheritdoc}
     */
    public function getPath()
    {
        return strtr(__DIR__, '\\', '/');
    }

 * The registerBundleDirs() can be removed from your Kernel class;

 * If your code relies on getBundleDirs() or the kernel.bundle_dirs parameter,
   it should be upgraded to use the new interface (see Doctrine commands for
   many example of such a change);

 * When referencing a bundle, you must now always use its name (no more \ or /
   in bundle names) -- this transition was already done for most things
   before, and now applies to the routing as well;

 * Imports in routing files must be changed:
    Before: <import resource="Sensio/CasBundle/Resources/config/internal.xml" />
    After:  <import resource="@SensioCasBundle/Resources/config/internal.xml" />
2011-01-20 18:42:47 +01:00
Victor Berchet
b75840c6fc DI Extension: use the base class from the HttpKernel Component 2011-01-19 22:08:41 +01:00
Dominique Bongiraud
64fb94c725 normalized license messages in PHP files 2011-01-18 08:07:46 +01:00
Bulat Shakirzyanov
8235f71f57 [DoctrineMongoDBBundle] switched to compiler passes for proxy/hydrator directory creation and event listeners 2011-01-16 20:45:55 +01:00
Johannes Schmitt
f1b7bc1fe9 some refactorings/improvements 2011-01-15 21:07:35 +01:00
Bulat Shakirzyanov
39e33df573 fixed abstract extension to product correct array with just mapping type specified 2011-01-14 08:21:50 +01:00
devel
b74bb15975 Fixed an issue with the definition description Mongo DB collections.
Committer: VlastV <me@vlastv.ru>
2011-01-04 18:05:48 +01:00
Benjamin Eberlei
fa7fdedf4b Introduced meta-bundle DoctrineAbstractBundle to squash 400+ loc of code duplication from ORM and MongoDB Bundles. 2011-01-03 08:07:22 +01:00