Permalink
Commits on Sep 30, 2011
  1. [Routing] fixed route overriden mechanism when using embedded collect…

    …ions (closes #2139)
    fabpot committed Sep 30, 2011
Commits on Sep 29, 2011
  1. merged branch igorw/composer (PR #2275)

    Commits
    -------
    
    731b28b [composer] add missing deps for FrameworkBundle
    9c8f100 [composer] change ext/intl to the new ext-intl syntax
    d535afe [composer] fix monolog-bridge composer.json, add more inter-component deps
    9ade639 [composer] add composer.json
    
    Discussion
    ----------
    
    Composer
    
    This PR adds a composer.json file for [composer](https://github.com/composer/composer) ([more info](packagist.org/about-composer)).
    
    For discussion you can also go into #composer-dev on freenode and argue with naderman, seldaek and everzet.
    
    ---------------------------------------------------------------------------
    
    by naderman at 2011/09/26 15:51:51 -0700
    
    You haven't entered any keywords, they might come in handy when searching for packages on packagist.
    
    But really this is just a +1 ;-)
    
    ---------------------------------------------------------------------------
    
    by stof at 2011/09/26 16:12:21 -0700
    
    See my comments on your previous (non-rebased) commit: igorw/symfony@f1c0242
    
    ---------------------------------------------------------------------------
    
    by igorw at 2011/09/27 00:04:36 -0700
    
    Following dependencies do not have a composer.json yet: Twig, Doctrine (orm, dbal, common), swiftmailer.
    
    Also missing from the standard edition: assetic, twig-extensions, jsm-metadata, SensioFrameworkExtraBundle, JMSSecurityExtraBundle, SensioDistributionBundle, SensioGeneratorBundle, AsseticBundle.
    
    The point is, those can be added later on. Having the components composerized is already a leap forward. Also, doctrine depends on some symfony components, we've got to start somewhere.
    
    ---------------------------------------------------------------------------
    
    by Seldaek at 2011/09/27 00:36:41 -0700
    
    Also, just for information, the plan is to have `symfony/framework-bundle` be the "framework", with all dependencies to doctrine etc, though we should really only have strict requirements in there, and then in symfony-standard we ship a composer.json that requires the framework-bundle, doctrine-orm and things like that that are not essential to core. Otherwise people don't have a choice about what they use anymore.
    
    Just a comment btw, the json is invalid, all / should be escaped. However json_decode is nice enough to parse those without complaining, browsers do too, even Crockford's json2.js does, so I'm not sure if we should privilege readability over strictness, since it seems nobody really cares about this escaping.
    
    ---------------------------------------------------------------------------
    
    by igorw at 2011/09/27 00:41:39 -0700
    
    So, I've implemented all of @stof's suggestions, except (for reasons stated above):
    
    * doctrine to DoctrineBundle
    * swiftmailer to SwiftmailerBundle
    * twig to TwigBundle
    * doctrine-common to Validator
    * FrameworkBundle (what exactly does it depend on?)
    
    ---------------------------------------------------------------------------
    
    by stof at 2011/09/27 00:52:31 -0700
    
    @igorw at least HttpKernel, Routing, Templating, EventDispatcher, Doctrine Common (annotations cannot be disabled), Translator, Form (optional), Validator (optional), Console (optional). See the service definitions to see the others
    
    @Seldaek FrameworkBundle does not depend on Doctrine, except for Common
    
    ---------------------------------------------------------------------------
    
    by beberlei at 2011/09/27 03:15:34 -0700
    
    What does the symfony/ or ext/ prefix control in composer?
    
    ---------------------------------------------------------------------------
    
    by Seldaek at 2011/09/27 03:33:52 -0700
    
    symfony/ is just the (mandatory) vendor namespace. Also ext/ has been renamed to ext- now, so it's not in any vendor, and should avoid potential issues.
    
    ---------------------------------------------------------------------------
    
    by beberlei at 2011/09/27 05:07:03 -0700
    
    @Seldaek Mandatory? So every package name is "vendor/package"? I like that because previously i thought package names are not namespaced, and thus clashes could occur between different communities easily.
    
    ---------------------------------------------------------------------------
    
    by Seldaek at 2011/09/27 05:16:20 -0700
    
    @beberlei: Mandatory. As of yesterday http://packagist.org/ will tell you you have an invalid package name if there's no slash in it. See composer/packagist@1306d1c#diff-3
    fabpot committed Sep 29, 2011
Commits on Sep 28, 2011
Commits on Sep 27, 2011
Commits on Sep 26, 2011
  1. [composer] add composer.json

    igorw committed Sep 24, 2011
Commits on Sep 23, 2011
  1. Added PCRE_DOTALL modifier to RouteCompiler to allow urlencoded linef…

    …eed in route parameters.
    geezmo committed Sep 23, 2011
Commits on Aug 30, 2011
  1. [Routing] fixed a caching issue when annotations are used on a base c…

    …lass used by more than one concrete class
    
    Doctrine caches annotations. For methods, it uses PHP reflection and the getDeclaringClass() to create
    a unique cache key. Unfortunately, if you have 2 classes that extend another one, the cache will be shared.
    It's not a problem except that before this patch, the default route name was also cached (as the cache is serialized
    after we changed the object). So, all other classes inherited this default route name. The fix is quite easy:
    just don't change the read annotation object.
    fabpot committed Aug 30, 2011
Commits on Aug 13, 2011
  1. Revert "expanded namespaces within phpdoc (special for PhpStorm)"

    This reverts commit 6e7439e73ade26bca01edc193c836b35aaa91ffe.
    fabpot committed Aug 13, 2011
Commits on Aug 10, 2011
Commits on Jul 26, 2011
  1. [Routing] changed UrlGeneratorInterface::generate() signature to allo…

    …w passing objects instead of arrays
    fabpot committed Jul 26, 2011
Commits on Jul 22, 2011
  1. merged branch ericclemmons/fix-router-generator-empty-query-string (P…

    …R #1773)
    
    Commits
    -------
    
    03c7cfe UrlGenerator no longer appends '?' if query string is empty
    
    Discussion
    ----------
    
    UrlGenerator no longer appends '?' if query string is empty
    
    If you generate a URL using null parameters (`array('foo' => null, 'bar' => null')`), `http_build_query` returns an empty string, resulting in a trailing `?` at the end of the generated URL.
    
    This fixes that so that, if there are `$extra` params & `http_build_query` is empty, the URL is no longer appended.
    
    ---------------------------------------------------------------------------
    
    by fabpot at 2011/07/22 10:15:26 -0700
    
    Can you add unit tests?
    
    ---------------------------------------------------------------------------
    
    by ericclemmons at 2011/07/22 10:52:21 -0700
    
    Yes sir, will do.
    
    -Eric Clemmons
     Sent from my iPad Nano
    
    On Jul 22, 2011, at 12:15 PM, fabpot<reply@reply.github.com> wrote:
    
    > Can you add unit tests?
    >
    > --
    > Reply to this email directly or view it on GitHub:
    > symfony/symfony#1773 (comment)
    
    ---------------------------------------------------------------------------
    
    by ericclemmons at 2011/07/22 11:55:30 -0700
    
    **Added passing test.**
    
    Currently `master` fails test:
    
    ```
    1) Symfony\Tests\Component\Routing\Generator\UrlGeneratorTest::testUrlWithNullExtraParameters
    Failed asserting that two strings are equal.
    --- Expected
    +++ Actual
    @@ @@
    -http://localhost/app.php/testing
    +http://localhost/app.php/testing?
    
    //tests/Symfony/Tests/Component/Routing/Generator/UrlGeneratorTest.php:114
    ```
    fabpot committed Jul 22, 2011
Commits on Jul 19, 2011
  1. [Routing] fixed default value for Routes as they can be anything if t…

    …hey don't need to be used as default values for placeholders
    fabpot committed Jul 19, 2011
Commits on Jul 17, 2011
  1. [Routing] fixed a bug when a default value is an integer

    A default value is always a string in the context of routing.
    fabpot committed Jul 17, 2011
Commits on Jul 12, 2011
  1. [Routing] Allow multiple `@Route` annotations with a default name on …

    …a single method (fixes #1647)
    vicb committed Jul 12, 2011
Commits on Jul 7, 2011
Commits on Jul 1, 2011
  1. merged branch Seldaek/router_esc (PR #1471)

    Commits
    -------
    
    418d6a0 [Routing] Fix syntax error when dumping routes with single quotes in the requirements or pattern
    2b5e22d [Routing] Fix ApacheDumper when a space appears in a default value
    6c7f484 [Routing] Fix dumper so it doesn't print trailing whitespace
    761724a [Routing] Adjust urlescaping rules, fixes #752
    
    Discussion
    ----------
    
    [Router] Bunch o' Fixes
    
    The first commit changes the escaping rule to fix issues I had previously, and #752 as well, here's from the full commit message:
    
        Only + and % are now encoded in generated routes, since they are the only characters that, if not encoded, could cause problems/conflicts when decoded. Namely + turns into a space, and % followed by numbers could do funky things.
    
        The matcher decodes everything which works since nothing will have %NN without being escaped, and + are escaped as well.
    
    Second commit is just a test fix for the first
    
    Third and fourth are simply dumper escaping issues, nothing to argue about.
    
    Note that all changes have had test cases added, and I spent a few hours torturing/testing all this stuff with both Apache and PHP dumpers, in many browsers, and with URLs as wonky as `/%01%02%03%04%05%06%07%08%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20!%22$%25&%27%28%29*+,-./0123456789:;%3C=%3E@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B|%7D~/baz` which essentially represent the 1-255 char range minus ? and #.
    
    The only issues I really encountered after all the patches were applied is that Apache refuses to match `%22` (= `"`) and `*` in a url. I guess it's just because they're not allowed chars in windows paths, but | and < > works fine though. Anyway this works with the PHP dumper, and it didn't work either without my patches so it's not like I broke it, I'm just saying for the record.
    fabpot committed Jul 1, 2011
Commits on Jun 30, 2011
Commits on Jun 29, 2011
  1. [Routing] Fix syntax error when dumping routes with single quotes in …

    …the requirements or pattern
    Seldaek committed Jun 29, 2011
  2. [Routing] Fix dumper so it doesn't print trailing whitespace

    This fixes tests from the previous commit
    Seldaek committed Jun 29, 2011
  3. [Routing] Adjust urlescaping rules, fixes #752

    Only + and % are now encoded in generated routes, since they are the only characters that, if not encoded, could cause problems/conflicts when decoded. Namely + turns into a space, and % followed by numbers could do funky things.
    
    The matcher decodes everything which works since nothing will have %NN without being escaped, and + are escaped as well.
    Seldaek committed Jun 29, 2011
Commits on Jun 17, 2011
Commits on Jun 15, 2011
  1. [Routing] optimized PHP dumper when the parent prefix is the same for…

    … several adjacent collections (avoids the same test to be made)
    fabpot committed Jun 15, 2011
  2. merged branch lmcd/master (PR #1290)

    Commits
    -------
    
    49dd558 Couple more CS fixes
    5a986bf Add $keysCount & minor CS fix
    91f4097 [Routing] Better nesting for RouteCollections in dumped URL matcher classes With this change, a route prefixed with '/blogger' will be nested inside '/blog' (for example)
    
    Discussion
    ----------
    
    [Routing] Better nesting for RouteCollections in dumped URL matcher classes
    
    Consider the following routing file:
    
        _blog:
            resource: "@AcmeDemoBundle/Resources/config/routing/BlogController.yml"
            prefix:   /blog
    
        _blogger:
            resource: "@AcmeDemoBundle/Resources/config/routing/BloggerController.yml"
            prefix:   /blogger
    
        _bloggeroo:
            resource: "@AcmeDemoBundle/Resources/config/routing/BloggerooController.yml"
            prefix:   /bloggeroo
    
        _blogtest:
            pattern:   /blogtest
            defaults:  { _controller: AcmeDemoBundle:Blog:test }
    
        login:
            pattern:   /login
            defaults:  { _controller: AcmeDemoBundle:Security:login }
    
    Note: Each imported file contains two simple blog/blogger/bloggeroo routes (e.g. blog_index & blog_view)
    With this change, the cached URL matcher looks something like this:
    
    ```php
    <?php
    class appprodUrlMatcher
    {
      public function match($pathinfo)
      {
          $allow = array();
    
          if (0 === strpos($pathinfo, '/blog')) {
              // blog_index
              if (preg_match('#^/blog/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {...}
    
              // blog_view
              if (preg_match('#^/blog/(?P<year>\d{4})/(?P<month>\d{2})/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {...}
    
              if (0 === strpos($pathinfo, '/blogger')) {
                  // blogger_index
                  if (preg_match('#^/blogger/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {...}
    
                  // blogger_view
                  if (preg_match('#^/blogger/(?P<year>\d{4})/(?P<month>\d{2})/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {...}
    
                  if (0 === strpos($pathinfo, '/bloggeroo')) {
                      // bloggeroo_index
                      if (preg_match('#^/bloggeroo/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {...}
    
                      // bloggeroo_view
                      if (preg_match('#^/bloggeroo/(?P<year>\d{4})/(?P<month>\d{2})/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {...}
    
                      throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException();
                  }
    
                  throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException();
              }
    
              // _blogtest
              if ($pathinfo === '/blogtest') {...}
    
              throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException();
          }
    
          // login
          if ($pathinfo === '/login') {...}
    
          throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException();
      }
    }
    ```
    
    As far as I can see, you can throw the 404 earlier (as I've done), as by nesting all these possibilities, there is no chance another route will be matched outside the parent if statement.
    
    ---------------------------------------------------------------------------
    
    by stloyd at 2011/06/11 08:37:15 -0700
    
    You should follow Symfony [CS rules] (http://symfony.com/doc/current/contributing/code/standards.html), also you should modify tests.
    
    ---------------------------------------------------------------------------
    
    by lmcd at 2011/06/11 08:46:32 -0700
    
    Besides the inline `continue` statement, I can't see spot any other CS violations. I'm on to the updated tests.
    
    ---------------------------------------------------------------------------
    
    by fabpot at 2011/06/13 02:19:14 -0700
    
    What if you have this:
    
        _blog:
            resource: "@AcmeDemoBundle/Resources/config/routing/BlogController.yml"
            prefix:   /blog
    
        login:
            pattern:   /login
            defaults:  { _controller: AcmeDemoBundle:Security:login }
    
        _blogger:
            resource: "@AcmeDemoBundle/Resources/config/routing/BloggerController.yml"
            prefix:   /blogger
    
    You cannot send 404 early because the same `blog` prefix is used in two different places. I can see many things that will break with this patch. I'm pretty sure we can enhance the performance of the existing code but let's do that after 2.0.
    
    ---------------------------------------------------------------------------
    
    by lmcd at 2011/06/13 05:04:03 -0700
    
    @fabpot: The code was designed so it would work in these kind of circumstances. I ran the dumper against the routing file you provided and this is the output below.
    
    I see no reason why you can't throw the 404 earlier, as by nesting everything with similar prefixes, we're eliminating the possibility that a route will ever be matched outside of that if statement.
    
    ```php
    public function match($pathinfo)
    {
        $allow = array();
    
        if (0 === strpos($pathinfo, '/blog')) {
            // blog_index
            if (preg_match('#^/blog/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {
                ...
            }
    
            // blog_view
            if (preg_match('#^/blog/(?P<year>\d{4})/(?P<month>\d{2})/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {
                ...
            }
    
            if (0 === strpos($pathinfo, '/blogger')) {
                // blog_index
                if (preg_match('#^/blogger/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {
                    ...
                }
    
                // blog_view
                if (preg_match('#^/blogger/(?P<year>\d{4})/(?P<month>\d{2})/(?P<slug>[^/]+?)$#x', $pathinfo, $matches)) {
                    ...
                }
    
                throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException();
            }
    
            throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException();
        }
    
        // login
        if ($pathinfo === '/login') {
            ...
        }
    
        throw 0 < count($allow) ? new MethodNotAllowedException(array_unique($allow)) : new ResourceNotFoundException();
    }
    ```
    
    ---------------------------------------------------------------------------
    
    by fabpot at 2011/06/13 07:48:49 -0700
    
    Can you add some more tests to ensure that everything works fine and that we won't have regressions later on? Thanks.
    fabpot committed Jun 15, 2011
Commits on Jun 14, 2011
  1. [Yaml] renamed load() to parse()

    fabpot committed Jun 14, 2011
  2. [Routing] tagged the public @api

    fabpot committed Jun 14, 2011