Commit Graph

459 Commits

Author SHA1 Message Date
Fabien Potencier
e645090423 moved security related things to a new SecurityBundle (the Security component is left unchanged) 2011-01-26 19:10:54 +01:00
Johannes Schmitt
57ae50e894 [Security] many improvements, and fixes 2011-01-26 16:38:54 +01:00
Fabien Potencier
fb889a2eee replaced some var_export() with json_encode() for better readability 2011-01-26 15:55:28 +01:00
Fabien Potencier
db2f2b1315 refactored template name parser to occur independently of the loaders 2011-01-26 14:53:12 +01:00
Fabien Potencier
136647c753 [FrameworkBundle] refactored router cache class parameters 2011-01-26 08:50:16 +01:00
Fabien Potencier
8b62df7247 changed the EventDispatcher and Event interfaces
The three notification methods do not return the Event instance anymore.

notify() does not return anything
notifyUntil() returns the returned value of the event that has processed the event
filter() returns the filtered value

Upgrading your listeners:
Listeners for notify() and filter() events: nothing to change
Listeners for notifyUntil() events:

Before:

    $event->setReturnValue('foo');
    return true;

After:

    $event->setProcessed();
    return 'foo';

If you notify events, the processing also need to be changed:

For filter() notifications: the filtered value is now available as
the returned value of the filter() method.

For notifyUntil() notifications:

Before:

    $event = $dispatcher->notifyUntil($event);
    if ($event->isProcessed()) {
        $ret = $event->getReturnValue();

        // do something with $ret
    }

After:

    $ret = $dispatcher->notifyUntil($event);
    if ($event->isProcessed()) {
        // do something with $ret
    }
2011-01-26 08:41:59 +01:00
Fabien Potencier
a66d050bdb removed KernelInterface::reboot() method 2011-01-26 08:41:59 +01:00
Fabien Potencier
36dcce40eb changed method signature to use the new KernelInterface 2011-01-25 17:20:20 +01:00
Fabien Potencier
a1945ca9bc fixed XML definitions 2011-01-25 17:13:34 +01:00
Fabien Potencier
935c82e1f9 [FrameworkBundle] simplified some code 2011-01-25 16:42:50 +01:00
Fabien Potencier
0e66e388ec added two interfaces: EventInterface and EventDispatcherInterface 2011-01-25 14:23:32 +01:00
Bernhard Schussek
d017970867 [Form] Implemented FormFactory::buildDefault() to ease the use of the new CSRF implementation without the DIC 2011-01-25 11:31:04 +01:00
Bernhard Schussek
0239d62619 [Form] Made the CSRF provider service public so that it can be used without forms 2011-01-25 11:31:04 +01:00
Bernhard Schussek
7848a7ca63 [Form] Refactored CSRF implementation to be reusable and to work correctly with the session service 2011-01-25 11:31:04 +01:00
Eriksen Costa
b38519bb23 [FrameworkBundle] fixed call to \Locale::getDefault() 2011-01-25 11:10:25 +01:00
Stepan Tanasiychuk
8ec6878a2a fix bug in Symfony\Bundle\FrameworkBundle\Templating\Helper\FormHelper 2011-01-25 10:03:50 +01:00
Fabien Potencier
03e51cc1e2 [FrameworkBundle] fixed template paths cache warmer (it should index all templates, not just the Twig ondes) 2011-01-25 09:55:03 +01:00
Fabien Potencier
2499ac4d21 [FrameworkBundle] fixed cache warmer when global view directory does not exist 2011-01-25 08:29:11 +01:00
Fabien Potencier
2860c2651c [FrameworkBundle] fixed template paths cache warmer 2011-01-24 22:05:48 +01:00
Bulat Shakirzyanov
571448b047 [FrameworkBundle] mode include tag filenames fixes 2011-01-24 19:33:43 +01:00
Fabien Potencier
edb11ad5cb [FrameworkBundle] added a cache warmer for the router
To enable this cache warmer, you must add a "cache-warner" option
to app:router:

        <app:config>
            <app:router cache-warmer="true" />
2011-01-24 18:13:43 +01:00
Fabien Potencier
206b49a22f [FrameworkBundle] added a cache warmer to pre-compute template paths
To enable this cache warmer, you must add a "cache-warner" option
to app:templating:

        <app:templating cache-warmer="true">
2011-01-24 18:13:39 +01:00
Fabien Potencier
d0b4bfc8f6 added a cache warmer sub-framework
Cache warmer will come in the next commits.

To warm up the cache on a production server, you can use
the cache:warmup command:

./app/console_prod cache:warmup
2011-01-24 18:08:51 +01:00
Jeremy Mikola
b3d55850df [FrameworkBundle] Controller::forward() should invoke HttpKernel instead of ControllerResolver 2011-01-24 17:45:19 +01:00
Fabien Potencier
49793c22d4 fixed event dispatcher 2011-01-24 16:46:04 +01:00
Daniel Holmes
fd98c8f0f2 Removed assumption that phpunit.xml is relative 2011-01-24 07:35:45 +01:00
Fabien Potencier
e1a3cd0446 removed output() methods, which are only shortcut for 'echo render' 2011-01-23 22:09:12 +01:00
Johannes M. Schmitt
0144dd86da adds synthetic attribute to definitions
This attribute can be used to hint that the service is being injected
dynamically at runtime, and not constructed by the DIC.
2011-01-23 21:11:50 +01:00
Fabien Potencier
1c11d81611 made all event listeners lazy loaded
* The register() method on all listeners has been removed
 * Instead, the information is now put directly in the DIC tag

For instance, a listener on core.request had this method:

   public function register(EventDispatcher $dispatcher, $priority = 0)
   {
       $dispatcher->connect('core.response', array($this, 'filter'), $priority);
   }

And this tag in the DIC configuration:

  <tag name="kernel.listener" />

Now, it only has the following configuration:

  <tag name="kernel.listener" event="core.response" method="filter" priority="0" />

The event and method attributes are now mandatory.
2011-01-23 18:07:05 +01:00
Fabien Potencier
9310eea57a optimized templating layer
You must now explicitly register the templating engine you want to use:

  <app:templating>
      <app:engine id="twig" />
  </app:templating>

  app.templating:
      engines: ['twig']

Symfony2 comes with two such engines: 'twig', and 'php'.
2011-01-23 15:43:08 +01:00
Fabien Potencier
5e625d1f52 [FrameworkBundle] simplified code 2011-01-23 14:38:09 +01:00
Fabien Potencier
43c61754ab [FrameworkBundle] removed obsolete parameter 2011-01-23 14:33:19 +01:00
Fabien Potencier
ad0e94468d [FrameworkBundle] removed obsolete option 2011-01-23 14:17:15 +01:00
Fabien Potencier
09aeb78634 removed Kernel::isBooted() method 2011-01-23 13:17:50 +01:00
Fabien Potencier
8c0d46365d [FrameworkBundle] added a comment for the request service
This reverts commit c68501cca4.
2011-01-23 11:22:33 +01:00
Fabien Potencier
73ab687521 moved ControllerResolver methods to HttpKernel (makes more sense) 2011-01-23 10:23:33 +01:00
Fabien Potencier
c68501cca4 [FrameworkBundle] removed the request service from configuration 2011-01-23 10:05:22 +01:00
Fabien Potencier
b577ce665a [HttpKernel] fixed scope management in HttpKernel
We should always leave the request scope at the end of the request processing.
If not, the HttpKernel leaves the container in a different state.
2011-01-23 08:47:00 +01:00
Fabien Potencier
86b357d70b [FrameworkBundle] fixed ESI configuration 2011-01-23 08:43:29 +01:00
Fabien Potencier
a8685614e0 [FrameworkBundle] fixed session auto-start option 2011-01-23 08:36:19 +01:00
Fabien Potencier
eb8b3d9c21 [FrameworkBundle] added support for both csrf-protection and csrf_protection 2011-01-22 20:12:45 +01:00
Fabien Potencier
bd125fc05e [FrameworkBundle] fixed typo 2011-01-22 20:09:36 +01:00
Ryan Weaver
f73107cb9d [FrameworkBundle] Updting XSD file for new csrf_protection configuration format. 2011-01-22 20:04:36 +01:00
Johannes M. Schmitt
1d5b6ed908 adds scope to the DI container 2011-01-22 15:20:50 +01:00
Fabien Potencier
59a974e8f6 added TemplateLocatorInterface 2011-01-22 08:31:08 +01:00
Bulat Shakirzyanov
5ff0dedebb [FrameworkBundle] fixed template names 2011-01-22 07:23:55 +01:00
Hugo Hamon
c13b0db4c8 [HttpFoundation] fixed outdated documentation for the Controller class, which does not implement ArrayAccess anymore. 2011-01-22 07:19:11 +01:00
Fabien Potencier
69f0ec3b1a added a method to normalize config entries coming from YAML and XML 2011-01-21 17:44:30 +01:00
Bulat Shakirzyanov
acb19bc43f [FrameworkBundle] added 'document_root' option for File objects 2011-01-21 17:13:05 +01:00
Johannes M. Schmitt
8d19136a55 refactors extensions to call XXXLoad only once with all config sections 2011-01-21 17:04:18 +01:00
Fabien Potencier
645528c9c6 fixed typo 2011-01-21 16:28:24 +01:00
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
Christophe Coevoet
1e793a2500 Fixed init:bundle 2011-01-21 14:19:51 +01:00
Fabien Potencier
4e0ecfdf81 [FrameworkBundle] fixed init:bundle 2011-01-21 12:58:46 +01:00
Fabien Potencier
a8e0a22011 [FrameworkBundle] fixed SecurityContext when security is disabled 2011-01-21 12:32:21 +01:00
Fabien Potencier
8649debb06 [Routing] fixed imports from the current directory 2011-01-21 12:06:06 +01:00
Johannes M. Schmitt
507da2a1ab some performance tweaks
This adds lazy loading for firewall configurations. This is useful when you have multiple firewalls, only the firewalls which are actually needed to process the Request are initialized. So, your event dispatcher is not as costly to initialize anymore.

It also implements re-using of RequestMatchers if all matching rules are the same, and exposes the remaining rules which are already implemented by the request matcher (host, ip, methods) in the access-control section
2011-01-21 11:57:43 +01:00
Daniel Holmes
e135c14538 Allow arbitrary ordering of config elements in symfony xml config 2011-01-21 09:55:55 +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
Fabien Potencier
67f13fee9e [HttpKernel] made a small tweak 2011-01-20 11:38:17 +01:00
Victor Berchet
b75840c6fc DI Extension: use the base class from the HttpKernel Component 2011-01-19 22:08:41 +01:00
Bernhard Schussek
8f8f53d631 [Form][FrameworkBundle] Implemented FormFactory and added it to the DI container 2011-01-19 16:25:50 +01:00
Jordi Boggiano
a305f9b25a [Form] Fixed indenting 2011-01-19 16:25:50 +01:00
Jordi Boggiano
de3f240ea4 [Form] Added required attribute on input field templates 2011-01-19 16:25:49 +01:00
Jordi Boggiano
ae40a5da53 [Form] Use HTML5 number and url input types for number and url fields 2011-01-19 16:25:49 +01:00
Christophe Coevoet
f5f7021669 Fixed the conenction alias used by acl 2011-01-19 11:41:14 +01:00
Lukas Kahwe Smith
d030882c20 ignore firewalls that are set to false (f.e. http-basic: false), removed two unused variables 2011-01-19 07:33:04 +01:00
Fabien Potencier
40a70cd6f4 simplified TemplateNameParser::parse() return value 2011-01-18 19:13:37 +01:00
Fabien Potencier
b4acae5b73 removed defaults to TemplateNameParserInterface::parse() method as it was not used anywhere (everything is explicit now) 2011-01-18 18:51:29 +01:00
Dominique Bongiraud
64fb94c725 normalized license messages in PHP files 2011-01-18 08:07:46 +01:00
Fabien Potencier
5b3e5e454b reverted a previous commit where translators were made optional 2011-01-17 22:58:55 +01:00
Fabien Potencier
15575bccc4 made order of template engine and data collector more predictable 2011-01-17 22:27:13 +01:00
Fabien Potencier
00b19e234d fixed typos 2011-01-17 20:23:32 +01:00
Fabien Potencier
85f888715c [FrameworkBundle] added the possibility to change the template for row() 2011-01-17 19:08:02 +01:00
Ryan Weaver
fac78859d5 [Form] Adding a row() PHP helper equivalent to the Twig form_row() for outputting the label, error and tag of a form field. 2011-01-17 19:07:01 +01:00
Fabien Potencier
e684a81b96 fixed unit tests 2011-01-17 18:05:35 +01:00
Fabien Potencier
f4cf31a275 made some minor tweaks 2011-01-17 17:46:27 +01:00
Fabien Potencier
ea279278ae disable session if not explicitely enabled 2011-01-17 17:44:36 +01:00
Fabien Potencier
d406ca0d6b [FrameworkBundle] made ESI optional (should now be enabled explicitely) 2011-01-17 16:21:46 +01:00
Fabien Potencier
dba8c67941 [FrameworkBundle] disable translator if not explicitely enabled 2011-01-17 16:05:24 +01:00
Fabien Potencier
e0050dfc8f [FrameworkBundle] added a compiler pass for translation loaders 2011-01-17 11:29:38 +01:00
Fabien Potencier
4c2537f1c3 made data collectors private 2011-01-17 11:17:48 +01:00
Fabien Potencier
d06f805d95 added a priority for data collectors 2011-01-17 11:09:31 +01:00
Joseph Rouff
ca60259ed0 Changes forgotten in view refactoring in 056b6e4d
* Several .php template have not been renamed in .php.html
2011-01-17 08:27:53 +01:00
Fabien Potencier
175398583b changed templating engine used by init:bundle to Twig 2011-01-16 19:01:51 +01:00
Christophe Coevoet
99a67ec21b Updated skeleton to the new template syntax 2011-01-16 19:00:06 +01:00
Fabien Potencier
b7d2528384 added a way for any extension to add classes to the class cache 2011-01-16 11:32:17 +01:00
Fabien Potencier
5c64ca8a30 renamed Container::freeze() to Container::compile() 2011-01-16 08:12:36 +01:00
Ryan Weaver
416713afb1 [Cache] Changing variable from a property to a normal variable for consistency - the variable is passed to the parent constructor and set on the property there. 2011-01-16 07:39:07 +01:00
Johannes Schmitt
f1b7bc1fe9 some refactorings/improvements 2011-01-15 21:07:35 +01:00
Fabien Potencier
102491b9b8 [FrameworkBundle] fixed template name parsing for namespaced bundles 2011-01-15 20:45:43 +01:00
Fabien Potencier
38cbc610e9 [FrameworkBundle] fixed controller names conversion when a bundle is defined in two different namespaces 2011-01-15 20:40:55 +01:00
Fabien Potencier
5b61cb5a8d [Framework] added some more test to demonstrate how template and controller name work with a vendor and a category in the namespace 2011-01-15 20:23:48 +01:00
Bertrand Zuchuat
ff82905c57 Typo on command asset:install 2011-01-15 20:11:45 +01:00
Fabien Potencier
272933d2ce fixed typo 2011-01-15 15:30:15 +01:00
Fabien Potencier
7ac6d59173 changed the bundle name to be the class name of the bundle, not the last part of the namespace
Let's take some examples to explain the change.

First, if you don't use any vendored bundles, this commit does not change anything.

So, let's say you use a FooBundle from Sensio. The files are stored under Bundle\Sensio\FooBundle.
And the Bundle class is Bundle\Sensio\FooBundle\SensioFooBundle.php.

Before the change, the bundle name ($bundle->getName()) would have returned 'FooBundle'.
Now it returns 'SensioFooBundle'.

Why does it matter? Well, it makes template names and controller names easier to read:

Before:

    Template: Sensio\FooBundle:Bar:index.twig.html
    Controller: Sensio\FooBundle:Bar:indexAction

After

    Template: SensioFooBundle:Bar:index.twig.html
    Controller: SensioFooBundle:Bar:indexAction

NB: Even if the change seems simple enough, the implementation is not. As finding
the namespace from the bundle class name is not trivial

NB2: If you don't follow the bundle name best practices, this will probably
leads to unexpected behaviors.
2011-01-15 15:17:01 +01:00
Fabien Potencier
e84c867336 [FrameworkBundle] added some unit tests 2011-01-15 14:04:24 +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