1CHANGELOG 2========= 3 42.8.0 5----- 6 7 * allowed specifying a directory to recursively load all routing configuration files it contains 8 * Added ObjectRouteLoader and ServiceRouteLoader that allow routes to be loaded 9 by calling a method on an object/service. 10 * [DEPRECATION] Deprecated the hardcoded value for the `$referenceType` argument of the `UrlGeneratorInterface::generate` method. 11 Use the constants defined in the `UrlGeneratorInterface` instead. 12 13 Before: 14 15 ```php 16 $router->generate('blog_show', array('slug' => 'my-blog-post'), true); 17 ``` 18 19 After: 20 21 ```php 22 use Symfony\Component\Routing\Generator\UrlGeneratorInterface; 23 24 $router->generate('blog_show', array('slug' => 'my-blog-post'), UrlGeneratorInterface::ABSOLUTE_URL); 25 ``` 26 272.5.0 28----- 29 30 * [DEPRECATION] The `ApacheMatcherDumper` and `ApacheUrlMatcher` were deprecated and 31 will be removed in Symfony 3.0, since the performance gains were minimal and 32 it's hard to replicate the behaviour of PHP implementation. 33 342.3.0 35----- 36 37 * added RequestContext::getQueryString() 38 392.2.0 40----- 41 42 * [DEPRECATION] Several route settings have been renamed (the old ones will be removed in 3.0): 43 44 * The `pattern` setting for a route has been deprecated in favor of `path` 45 * The `_scheme` and `_method` requirements have been moved to the `schemes` and `methods` settings 46 47 Before: 48 49 ```yaml 50 article_edit: 51 pattern: /article/{id} 52 requirements: { '_method': 'POST|PUT', '_scheme': 'https', 'id': '\d+' } 53 ``` 54 55 ```xml 56 <route id="article_edit" pattern="/article/{id}"> 57 <requirement key="_method">POST|PUT</requirement> 58 <requirement key="_scheme">https</requirement> 59 <requirement key="id">\d+</requirement> 60 </route> 61 ``` 62 63 ```php 64 $route = new Route(); 65 $route->setPattern('/article/{id}'); 66 $route->setRequirement('_method', 'POST|PUT'); 67 $route->setRequirement('_scheme', 'https'); 68 ``` 69 70 After: 71 72 ```yaml 73 article_edit: 74 path: /article/{id} 75 methods: [POST, PUT] 76 schemes: https 77 requirements: { 'id': '\d+' } 78 ``` 79 80 ```xml 81 <route id="article_edit" pattern="/article/{id}" methods="POST PUT" schemes="https"> 82 <requirement key="id">\d+</requirement> 83 </route> 84 ``` 85 86 ```php 87 $route = new Route(); 88 $route->setPath('/article/{id}'); 89 $route->setMethods(array('POST', 'PUT')); 90 $route->setSchemes('https'); 91 ``` 92 93 * [BC BREAK] RouteCollection does not behave like a tree structure anymore but as 94 a flat array of Routes. So when using PHP to build the RouteCollection, you must 95 make sure to add routes to the sub-collection before adding it to the parent 96 collection (this is not relevant when using YAML or XML for Route definitions). 97 98 Before: 99 100 ```php 101 $rootCollection = new RouteCollection(); 102 $subCollection = new RouteCollection(); 103 $rootCollection->addCollection($subCollection); 104 $subCollection->add('foo', new Route('/foo')); 105 ``` 106 107 After: 108 109 ```php 110 $rootCollection = new RouteCollection(); 111 $subCollection = new RouteCollection(); 112 $subCollection->add('foo', new Route('/foo')); 113 $rootCollection->addCollection($subCollection); 114 ``` 115 116 Also one must call `addCollection` from the bottom to the top hierarchy. 117 So the correct sequence is the following (and not the reverse): 118 119 ```php 120 $childCollection->addCollection($grandchildCollection); 121 $rootCollection->addCollection($childCollection); 122 ``` 123 124 * [DEPRECATION] The methods `RouteCollection::getParent()` and `RouteCollection::getRoot()` 125 have been deprecated and will be removed in Symfony 2.3. 126 * [BC BREAK] Misusing the `RouteCollection::addPrefix` method to add defaults, requirements 127 or options without adding a prefix is not supported anymore. So if you called `addPrefix` 128 with an empty prefix or `/` only (both have no relevance), like 129 `addPrefix('', $defaultsArray, $requirementsArray, $optionsArray)` 130 you need to use the new dedicated methods `addDefaults($defaultsArray)`, 131 `addRequirements($requirementsArray)` or `addOptions($optionsArray)` instead. 132 * [DEPRECATION] The `$options` parameter to `RouteCollection::addPrefix()` has been deprecated 133 because adding options has nothing to do with adding a path prefix. If you want to add options 134 to all child routes of a RouteCollection, you can use `addOptions()`. 135 * [DEPRECATION] The method `RouteCollection::getPrefix()` has been deprecated 136 because it suggested that all routes in the collection would have this prefix, which is 137 not necessarily true. On top of that, since there is no tree structure anymore, this method 138 is also useless. Don't worry about performance, prefix optimization for matching is still done 139 in the dumper, which was also improved in 2.2.0 to find even more grouping possibilities. 140 * [DEPRECATION] `RouteCollection::addCollection(RouteCollection $collection)` should now only be 141 used with a single parameter. The other params `$prefix`, `$default`, `$requirements` and `$options` 142 will still work, but have been deprecated. The `addPrefix` method should be used for this 143 use-case instead. 144 Before: `$parentCollection->addCollection($collection, '/prefix', array(...), array(...))` 145 After: 146 ```php 147 $collection->addPrefix('/prefix', array(...), array(...)); 148 $parentCollection->addCollection($collection); 149 ``` 150 * added support for the method default argument values when defining a @Route 151 * Adjacent placeholders without separator work now, e.g. `/{x}{y}{z}.{_format}`. 152 * Characters that function as separator between placeholders are now whitelisted 153 to fix routes with normal text around a variable, e.g. `/prefix{var}suffix`. 154 * [BC BREAK] The default requirement of a variable has been changed slightly. 155 Previously it disallowed the previous and the next char around a variable. Now 156 it disallows the slash (`/`) and the next char. Using the previous char added 157 no value and was problematic because the route `/index.{_format}` would be 158 matched by `/index.ht/ml`. 159 * The default requirement now uses possessive quantifiers when possible which 160 improves matching performance by up to 20% because it prevents backtracking 161 when it's not needed. 162 * The ConfigurableRequirementsInterface can now also be used to disable the requirements 163 check on URL generation completely by calling `setStrictRequirements(null)`. It 164 improves performance in production environment as you should know that params always 165 pass the requirements (otherwise it would break your link anyway). 166 * There is no restriction on the route name anymore. So non-alphanumeric characters 167 are now also allowed. 168 * [BC BREAK] `RouteCompilerInterface::compile(Route $route)` was made static 169 (only relevant if you implemented your own RouteCompiler). 170 * Added possibility to generate relative paths and network paths in the UrlGenerator, e.g. 171 "../parent-file" and "//example.com/dir/file". The third parameter in 172 `UrlGeneratorInterface::generate($name, $parameters = array(), $referenceType = self::ABSOLUTE_PATH)` 173 now accepts more values and you should use the constants defined in `UrlGeneratorInterface` for 174 claritiy. The old method calls with a Boolean parameter will continue to work because they 175 equal the signature using the constants. 176 1772.1.0 178----- 179 180 * added RequestMatcherInterface 181 * added RequestContext::fromRequest() 182 * the UrlMatcher does not throw a \LogicException anymore when the required 183 scheme is not the current one 184 * added TraceableUrlMatcher 185 * added the possibility to define options, default values and requirements 186 for placeholders in prefix, including imported routes 187 * added RouterInterface::getRouteCollection 188 * [BC BREAK] the UrlMatcher urldecodes the route parameters only once, they 189 were decoded twice before. Note that the `urldecode()` calls have been 190 changed for a single `rawurldecode()` in order to support `+` for input 191 paths. 192 * added RouteCollection::getRoot method to retrieve the root of a 193 RouteCollection tree 194 * [BC BREAK] made RouteCollection::setParent private which could not have 195 been used anyway without creating inconsistencies 196 * [BC BREAK] RouteCollection::remove also removes a route from parent 197 collections (not only from its children) 198 * added ConfigurableRequirementsInterface that allows to disable exceptions 199 (and generate empty URLs instead) when generating a route with an invalid 200 parameter value 201