Commit Graph

106 Commits

Author SHA1 Message Date
Henrik Bjørnskov
5e9c9f4174 Template rename fix files 2011-01-21 15:06:10 +01:00
Henrik Bjørnskov
a5007febdd [FrameworkBundle] Renderer is once more the last of the templates 2011-01-21 15:06:10 +01:00
Ryan Weaver
17f9162b89 [Standards] Changing many instances of "boolean" to "Boolean". 2011-01-21 09:53:24 +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
Bulat Shakirzyanov
04fd4194b5 [DoctrineMongoDBBundle] fixed typo, updated extension test to reflection validation addon 2011-01-20 07:13:37 +01:00
Victor Berchet
b75840c6fc DI Extension: use the base class from the HttpKernel Component 2011-01-19 22:08:41 +01:00
Bulat Shakirzyanov
6d52645861 [DoctrineMongoDBBundle] registered new validation namespace for annotations 2011-01-19 21:50:51 +01:00
Bulat Shakirzyanov
1cbd0caa89 [DoctrineMongoDBBundle] added unique constraint, validator and test, registered validator in DIC 2011-01-19 21:50:47 +01:00
Fabien Potencier
12f3497281 simplified Doctrine unit tests 2011-01-19 08:22:13 +01:00
Fabien Potencier
23a7d3657a fixed Doctrine commands help message 2011-01-19 08:20:04 +01:00
Dominique Bongiraud
64fb94c725 normalized license messages in PHP files 2011-01-18 08:07:46 +01:00
Fabien Potencier
4c2537f1c3 made data collectors private 2011-01-17 11:17:48 +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
Fabien Potencier
5c64ca8a30 renamed Container::freeze() to Container::compile() 2011-01-16 08:12:36 +01:00
Fabien Potencier
a365ab2884 changed the template name format
Before

bundle:section:template.format.renderer

After

bundle:section:template.renderer.format

Notice that both the renderer and the format are mandatory.
2011-01-15 12:33:27 +01:00
Johannes Schmitt
3785a99b94 adds visibility to aliases 2011-01-07 15:58:48 +01:00
Bulat Shakirzyanov
92653bf827 [DoctrineMongoDBBundle] updated logging to support new embedded document in \stdClass 2011-01-07 08:07:38 +01:00
IamPersistent
8d69f8efd5 allow addition configuration in other config files, without killing the mapping that was previously set 2011-01-06 18:26:03 +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
Igor Wiedler
1577110c35 fix PHPUnit assertType deprecation warnings
PHPUnit 3.5.6 deprecates assertType in favor of assertInternalType and
assertInstanceOf. It will be completely removed in 3.6.
2011-01-03 07:44:30 +01:00
Fabien Potencier
62cd09e708 [TwigBundle] replaced the asset tag with an asset function (from {% asset css/foo.css %} to {{ asset('css/foo.css') }} 2010-12-31 16:59:44 +01:00
Benjamin Eberlei
500e02d4fd fixed inconsistency between MongoDB and ORM Annotation Reader definition that lead to a bug in the "common" code 2010-12-30 21:35:05 +01:00
Johannes Schmitt
db5e180d37 tweaked DI container 2010-12-30 15:59:52 +01:00
Benjamin Eberlei
ba2b1aad28 refactored Doctrine*Bundle to allow a much more flexible configuration 2010-12-30 14:39:48 +01:00
Henrik Bjørnskov
46949e2c22 [DoctrineBundle][DoctrineMongoDBBundle] Makes it possible to use shortcuts for defining document or entity classes when using the DaoAuthenticationProvider 2010-12-30 14:06:42 +01:00
Jonathan H. Wage
c54f6d81df Fixing DoctrineMongoDBBundle to work with latest version of Doctrine. 2010-12-21 08:52:12 +01:00
Jordi Boggiano
094d428e68 CS: Unified strict equality comparisons, put var on the right side 2010-12-21 08:51:21 +01:00
Fabien Potencier
b57411b5ec renamed reloadUserByAccount() to loadUserByAccount() 2010-12-18 08:15:13 +01:00
Johannes Schmitt
df6ffbbf07 remove user provider name 2010-12-18 08:10:53 +01:00
Fabien Potencier
b37f9b4b47 fixed unit tests 2010-12-16 10:22:52 +01:00
Henrik Bjørnskov
c543626cf5 [DoctrineMongoDBBundle] Fixed DoctrineMongoDBExtension::loadConnections to follow the new constructor signature introduced with the Doctrine\\MongoDB access layer refactoring so that Doctrine MongoDB logging works againg with the WebProfilerBundle 2010-12-15 20:58:36 +01:00
Johannes Schmitt
3c692bd160 fixed user refreshing after unserialization 2010-12-15 17:38:30 +01:00
Fabien Potencier
c9f08c0a68 changed all XML attribute names to take - instead of _ (everything should be consistent now) 2010-12-14 16:30:20 +01:00
Kévin Dunglas
915973f458 [DoctrineMongoDbLogger] fixed the "Call to a member function getDebugLogger() on a non-object" error 2010-12-08 08:22:34 +01:00
Kris Wallsmith
3e02eafc70 Fixed visibility of PHPUnit setUp and tearDown methods. 2010-12-06 15:52:23 +01:00
Steven Surowiec
87aeb0e603 [DoctrineMongoDBBundle] Added tag to document manager services 2010-12-03 00:06:47 +01:00
Jonathan H. Wage
7c47fd77cc Fix DoctrineMongoDBBundle to work with recent changes to Doctrine MongoDB ODM. 2010-12-03 00:06:29 +01:00
Ryan Weaver
7efb4630b8 [Command] Changing the InputOption::PARAMETER_* constants to InputOption::VALUE_* to more accurately reflect that these constants refer to the value or lack of value assigned to a particular option (e.g. --verbose or --em=doctrine).
To keep language consistent, three methods were changed in InputOption:

 * `InputOption::acceptParameter()` -> `InputOption::acceptValue()`
 * `InputOption::isParameterRequired()` -> InputOption::isValueRequired()`
 * `InputOption::isParameterOptional()` -> `InputOption::isValueOptional()`

The InputDefinition::asXml() method was also modified to update the `accept_value` and `is_value_required` attributes.
2010-11-27 19:56:27 +01:00
Fabien Potencier
60bbb8f380 [DependencyInjection] optimized compiled containers
* removed the __call() method in Container: it means that now, there is only
   one way to get a service: via the get() method;

 * removed the $shared variable in the dumped Container classes (we now use
   the $services variable from the parent class directly -- this is where we
   have a performance improvement);

 * optimized the PHP Dumper output.
2010-11-23 22:43:09 +01:00
H. Westphal
5b056b2b9a Refactored web profiler template definitions to make it easier for bundle developers to add their templates 2010-11-23 12:48:35 +01:00
H. Westphal
331466f1eb Fixed web profiler mongodb twig template 2010-11-23 12:45:47 +01:00
Fabien Potencier
e9d4d990df [WebProfiler] renamed block names for data collector templates 2010-11-22 08:43:30 +01:00
Fabien Potencier
6fa943ad54 moved Exception and WebProfiler templates to Twig 2010-11-21 15:37:01 +01:00
Kris Wallsmith
6428544cd8 [DoctrineMongoDBBundle] added a phpdoc block 2010-11-15 09:43:39 +01:00
Kris Wallsmith
b932441ac9 [DoctrineMongoDBBundle] added ability to register global listeners and subscribers via the DIC 2010-11-15 09:43:32 +01:00
Kris Wallsmith
da188734d8 [DoctrineMongoDBBundle] added support for multiple event managers to the DIC extension 2010-11-15 09:42:45 +01:00
Kris Wallsmith
9ab33e4ae4 [DoctrineMongoDBBundle] added registration of event listeners and subscribers via service container tags 2010-11-15 09:40:28 +01:00
Kris Wallsmith
37d8fe1440 [DoctrineMongoDBBundle] fixed profiler menu text 2010-10-31 13:41:14 +01:00
Fabien Potencier
a4fbf74593 added a user provider for Doctrine MongoDB 2010-10-28 15:04:29 +02:00
Kris Wallsmith
29360a0eea Removed old resources array property from DI extension classes. 2010-10-18 16:56:33 +02:00