ссылка на symfony, чтобы сменить язык и остаться на странице - PullRequest
1 голос
/ 17 марта 2011

Я хотел бы сделать ссылку, которая будет в макете для изменения языка.Так что он должен работать для многих маршрутов.

например я нахожусь на странице / en / myModule

, а ссылки должны указывать на / de / myModule / fr / myModule

Я нашел решение здесь: http://oldforum.symfony -project.org / index.php / m / 70452 /

<?php echo link_to(
  'Germany', 
  '@default?' . http_build_query(array(
    'sf_culture' => 'de', 
    'module' => $sf_request->getParameter('module'), 
    'action' => $sf_request->getParameter('action'))
  ), null, '&')) ?>

Проблема в том, что мне нужен маршрут по умолчанию, и я не хочу иметьэто.

Есть ли решение для того, что мне нужно?

Ответы [ 3 ]

3 голосов
/ 29 марта 2011
routing:
  user_switch_culture:
   url: /culture-change/:language
   param: { module: user, changeCulture }

В вашем шаблоне макета:

<?php echo link_to(image_tag("flags/gb.gif"), "user_switch_culture", array("language"=>"en", "redirect"=>$sf_request->getUri())) ?>

Ссылка будет генерировать:

http://example.com/culture-change/fr?redirect=http//example.com/fr/control-panel

В вашем действии:

public function executeChangeCulture(sfWebRequest $request)
{
    $oldCulture = $this->getUser()->getCulture();
    $newCulture = $request->getParameter("language");
    $this->getUser()->setCulture($newCulture);
    return $this->redirect(str_replace('/'.$oldCulture.'/', '/'.$newCulture.'/', $request->getParameter("redirect")));
}

Просто с моей головы. должно работать ...

Невероятно: следует выполнить фильтр перенаправления, чтобы убедиться в правильности имени домена и т. Д.

2 голосов
/ 18 марта 2011

Почему бы не сделать для этого конкретные действия?

public function executeChangeLanguage(sfWebRequest $request)
{
  if (in_array($request->getParameter('lang'), sfConfig::get('app_site_languages'))
  {
   $this->getUser()->setCulture($request->getParameter('lang'));
  }

  // you can ask the browser for referrer or send a parameter to the change language action
  // something like '/change-language?lang=ro&redirect=your page'.
  // if you are sending a redirect parameter you must make sure that it's actually a page within your site
  $referrer = $request->getReferer();
  // or $referrer = $request->getParameter('redirect');

  // you can further check the referrer here
  return $this->redirect($referrer);
}
1 голос
/ 17 марта 2011

Я думаю, что у меня есть решение:

  $uri = sfContext::getInstance()->getRouting()->getCurrentRouteName();
  echo link_to('French', $uri, array('sf_culture'=>'fr')) . ' | ';
  echo link_to('English', $uri, array('sf_culture'=>'en')) . ' | ';
  echo link_to('German', $uri, array('sf_culture'=>'de'));

Это хорошее или есть лучшее решение?

...