@@ -61,6 +61,8 @@ public function generate($name, $parameters = array(), $absolute = false)
61
61
throw new RouteNotFoundException ('Route of this document is not an instance of Symfony\Component\Routing\Route but: ' .$ hint );
62
62
}
63
63
64
+ $ this ->unsetLocaleIfNotNeeded ($ route , $ parameters );
65
+
64
66
return parent ::generate ($ route , $ parameters , $ absolute );
65
67
}
66
68
@@ -74,7 +76,7 @@ public function generate($name, $parameters = array(), $absolute = false)
74
76
*
75
77
* @throws RouteNotFoundException if there is no route found for the provided name
76
78
*/
77
- protected function getRouteByName ($ name , array & $ parameters )
79
+ protected function getRouteByName ($ name , array $ parameters )
78
80
{
79
81
$ route = $ this ->provider ->getRouteByName ($ name , $ parameters );
80
82
if (empty ($ route )) {
@@ -93,7 +95,7 @@ protected function getRouteByName($name, array &$parameters)
93
95
*
94
96
* @return SymfonyRoute either the passed route or an alternative with better locale
95
97
*/
96
- protected function getBestLocaleRoute (SymfonyRoute $ route , & $ parameters )
98
+ protected function getBestLocaleRoute (SymfonyRoute $ route , $ parameters )
97
99
{
98
100
if (! $ route instanceof RouteObjectInterface) {
99
101
// this route has no content, we can't get the alternatives
@@ -106,7 +108,6 @@ protected function getBestLocaleRoute(SymfonyRoute $route, &$parameters)
106
108
$ routes = $ content ->getRoutes ();
107
109
$ contentRoute = $ this ->getRouteByLocale ($ routes , $ locale );
108
110
if ($ contentRoute ) {
109
- unset($ parameters ['_locale ' ]);
110
111
return $ contentRoute ;
111
112
}
112
113
}
@@ -167,7 +168,6 @@ protected function getRouteByContent($name, &$parameters)
167
168
168
169
$ route = $ this ->getRouteByLocale ($ routes , $ this ->getLocale ($ parameters ));
169
170
if ($ route ) {
170
- unset($ parameters ['_locale ' ]);
171
171
return $ route ;
172
172
}
173
173
@@ -251,4 +251,23 @@ public function getRouteDebugMessage($name, array $parameters = array())
251
251
252
252
return parent ::getRouteDebugMessage ($ name , $ parameters );
253
253
}
254
+
255
+ /**
256
+ * Unset the _locale parameter if it is there and not needed
257
+ *
258
+ * @param SymfonyRoute $route
259
+ * @param array $parameters
260
+ */
261
+ protected function unsetLocaleIfNotNeeded (SymfonyRoute $ route , array &$ parameters )
262
+ {
263
+ $ locale = $ this ->getLocale ($ parameters );
264
+ if (null !== $ locale ) {
265
+ if (preg_match ('/ ' .$ route ->getRequirement ('_locale ' ).'/ ' , $ locale ) && $ locale == $ route ->getDefault ('_locale ' )) {
266
+ $ compiledRoute = $ route ->compile ();
267
+ if (!in_array ('_locale ' , $ compiledRoute ->getVariables ())) {
268
+ unset($ parameters ['_locale ' ]);
269
+ }
270
+ }
271
+ }
272
+ }
254
273
}
0 commit comments