@@ -39,8 +39,8 @@ your autoloader to load the Routing component::
3939
4040 use Symfony\Component\Routing\Matcher\UrlMatcher;
4141 use Symfony\Component\Routing\RequestContext;
42- use Symfony\Component\Routing\RouteCollection;
4342 use Symfony\Component\Routing\Route;
43+ use Symfony\Component\Routing\RouteCollection;
4444
4545 $route = new Route('/foo', ['_controller' => 'MyController']);
4646 $routes = new RouteCollection();
@@ -82,20 +82,24 @@ be thrown.
8282Defining Routes
8383~~~~~~~~~~~~~~~
8484
85- A full route definition can contain up to seven parts:
85+ A full route definition can contain up to eight parts:
8686
87- #. The URL path route. This is matched against the URL passed to the `RequestContext `,
88- and can contain named wildcard placeholders (e.g. ``{placeholders} ``)
89- to match dynamic parts in the URL.
87+ #. The URL pattern. This is matched against the URL passed to the
88+ ``RequestContext ``. It is not a regular expression, but can contain named
89+ wildcard placeholders (e.g. ``{slug} ``) to match dynamic parts in the URL.
90+ The component will create the regular expression from it.
9091
91- #. An array of default values. This contains an array of arbitrary values
92- that will be returned when the request matches the route.
92+ #. An array of default parameters. This contains an array of arbitrary values
93+ that will be returned when the request matches the route. It is used by
94+ convention to map a controller to the route.
9395
9496#. An array of requirements. These define constraints for the values of the
95- placeholders as regular expressions.
97+ placeholders in the pattern as regular expressions.
9698
97- #. An array of options. These contain internal settings for the route and
98- are the least commonly needed.
99+ #. An array of options. These contain advanced settings for the route and
100+ can be used to control encoding or customize compilation.
101+ See :ref: `routing-unicode-support ` below. You can learn more about them by
102+ reading :method: `Symfony\\ Component\\ Routing\\ Route::setOptions ` implementation.
99103
100104#. A host. This is matched against the host of the request. See
101105 :doc: `/routing/hostname_pattern ` for more details.
@@ -105,6 +109,10 @@ A full route definition can contain up to seven parts:
105109#. An array of methods. These enforce a certain HTTP request method (``HEAD ``,
106110 ``GET ``, ``POST ``, ...).
107111
112+ #. A condition, using the :doc: `/components/expression_language/syntax `.
113+ A string that must evaluate to ``true `` so the route matches. See
114+ :doc: `/routing/conditions ` for more details.
115+
108116Take the following route, which combines several of these ideas::
109117
110118 $route = new Route(
@@ -114,7 +122,8 @@ Take the following route, which combines several of these ideas::
114122 [], // options
115123 '{subdomain}.example.com', // host
116124 [], // schemes
117- [] // methods
125+ [], // methods
126+ 'context.getHost() matches "/(secure|admin).example.com/"' // condition
118127 );
119128
120129 // ...
@@ -138,19 +147,22 @@ When using wildcards, these are returned in the array result when calling
138147``match ``. The part of the path that the wildcard matched (e.g. ``2012-01 ``) is used
139148as value.
140149
141- .. tip ::
150+ A placeholder matches any character except slashes ``/ `` by default, unless you define
151+ a specific requirement for it.
152+ The reason is that they are used by convention to separate different placeholders.
142153
143- If you want to match all URLs which start with a certain path and end in an
144- arbitrary suffix you can use the following route definition::
154+ If you want a placeholder to match anything, it must be the last of the route::
145155
146- $route = new Route(
147- '/start/{suffix }',
148- ['suffix ' => ''],
149- ['suffix ' => '.*']
150- );
156+ $route = new Route(
157+ '/start/{required}/{anything }',
158+ ['required ' => 'default '], // should always be defined
159+ ['anything ' => '.*'] // explicit requirement to allow "/"
160+ );
151161
152- Using Prefixes
153- ~~~~~~~~~~~~~~
162+ Learn more about it by reading :ref: `routing/slash_in_parameter `.
163+
164+ Using Prefixes and Collection Settings
165+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
154166
155167You can add routes or other instances of
156168:class: `Symfony\\ Component\\ Routing\\ RouteCollection ` to *another * collection.
@@ -166,11 +178,12 @@ host to all routes of a subtree using methods provided by the
166178 $subCollection->add(...);
167179 $subCollection->addPrefix('/prefix');
168180 $subCollection->addDefaults([...]);
169- $subCollection->addRequirements([]);
170- $subCollection->addOptions([]);
171- $subCollection->setHost('admin .example.com');
181+ $subCollection->addRequirements([... ]);
182+ $subCollection->addOptions([... ]);
183+ $subCollection->setHost('{subdomain} .example.com');
172184 $subCollection->setMethods(['POST']);
173185 $subCollection->setSchemes(['https']);
186+ $subCollection->setCondition('context.getHost() matches "/(secure|admin).example.com/"');
174187
175188 $rootCollection->addCollection($subCollection);
176189
@@ -210,7 +223,7 @@ Generate a URL
210223
211224While the :class: `Symfony\\ Component\\ Routing\\ Matcher\\ UrlMatcher ` tries
212225to find a route that fits the given request you can also build a URL from
213- a certain route::
226+ a certain route with the :class: ` Symfony \\ Component \\ Routing \\ Generator \\ UrlGenerator ` ::
214227
215228 use Symfony\Component\Routing\Generator\UrlGenerator;
216229 use Symfony\Component\Routing\RequestContext;
@@ -372,14 +385,17 @@ automatically in the background if you want to use it. A basic example of the
372385 ['cache_dir' => __DIR__.'/cache'],
373386 $requestContext
374387 );
375- $router->match('/foo/bar');
388+ $parameters = $router->match('/foo/bar');
389+ $url = $router->generate('some_route', ['parameter' => 'value']);
376390
377391.. note ::
378392
379393 If you use caching, the Routing component will compile new classes which
380394 are saved in the ``cache_dir ``. This means your script must have write
381395 permissions for that location.
382396
397+ .. _routing-unicode-support :
398+
383399Unicode Routing Support
384400~~~~~~~~~~~~~~~~~~~~~~~
385401
@@ -514,7 +530,7 @@ You can also include UTF-8 strings as routing requirements:
514530 * @Route(
515531 * "/category/{name}",
516532 * name="route2",
517- * defaults={"name"= "한국어"},
533+ * defaults={"name": "한국어"},
518534 * utf8=true
519535 * )
520536 */
0 commit comments