-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
hi
i think you should generate the current route with all locales you
support and directly use those to switch the language, instead of having
the client send a request and then redirecting.
as a side note, instead of the string replacement, you could use the php
method parse_url to get the elements from an url.
cheers,
david
Am 10.05.2011 17:56, schrieb theinterned:
> I solved this.
>
> I found the $router->match() method, which I am using against a
> cleaned up version of the $request->server->get('HTTP_REFERER'). This
> gives me the route parameters I need to generate my redirect route.
>
> Here is the completed action:
>
> public function switchLangAction($_locale)
> {
> $newLang = ($_locale == "en") ? "fr" : "en";
>
> $request = $this->get('request');
> $router = $this->get('router');
> $domain = $request->server->get('HTTP_HOST');
> $referrer = $request->server->get('HTTP_REFERER');
>
> // remove the protocol
> $referrer = preg_replace(';\b((ftp|https?)://)+?\b;', '',
> $referrer);
> // remove the domain
> $referrer = str_replace($domain, '', $referrer );
> // remove the controller
> $referrer = str_replace($request->getBaseUrl(), '',
> $referrer);
> // remove the query string
> $referrer = preg_replace('/\?.*/', '', $referrer);
> // match the resulting cleaned up route
> $referrerParams = $router->match( $referrer );
> // pluck the _route out of the params
> $referrerRoute = $referrerParams['_route'];
> unset($referrerParams['_route']);
> // switch the locale
> $referrerParams['_locale'] = $newLang;
>
> $response = new RedirectResponse( $this->generateUrl(
> $referrerRoute,
> $referrerParams
> ));
> return $response;
> }
>
>
> On May 9, 1:01 pm, Matt <[email protected]> wrote:
>> Hi,
>>
>> This is how I did it:
>>
>> public function changeLocaleAction($locale)
>> {
>> if ($this->request->hasSession())
>> $this->session->setLocale($locale);
>>
>> $referer = $this->request->server->get('HTTP_REFERER');
>> if (!isset($referer))
>> $referer = $this->generateUrl('index');
>>
>> return new RedirectResponse($referer);
>>
>> }
>>
>> I'm not sure if it is the best to do it way but it works for me in my use
>> cases.
>>
>> Regards,
>> Matt
>
- --
Liip AG // Agile Web Development // T +41 26 422 25 11
CH-1700 Fribourg // PGP 0xA581808B // www.liip.ch
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAk3JfDgACgkQqBnXnqWBgIuDHwCfVp25iEopMHTigFm5Q8AQmzM0
NdwAn2hCK2FCW+T/xbj118tgjHnzNqPA
=E/QL
-----END PGP SIGNATURE-----
--
If you want to report a vulnerability issue on symfony, please send it to
security at symfony-project.com
You received this message because you are subscribed to the Google
Groups "symfony users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en