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