在控制器symfony 3中刷新页面

时间:2017-10-02 07:56:51

标签: php symfony twig

我在控制器中有这个功能:

 /**
 * @Route("/{lang}", name="homepage_lang")
 * @param Request $request
 * @param $lang
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function indexLangAction(Request $request, $lang)
{

    if (isset($lang)){
        $newLang = $lang;
    }else{
        $localeLang = $request->getLocale();
        $newLang = $localeLang;
    }

    $this->get('session')->set("_locale", $newLang);

    // replace this example code with whatever you need
    return $this->render('default/index.html.twig', [
        'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
    ]);
}

和枝条中的按钮是这样的:

<button onclick="window.location.href='/es'" type="button">Español</button>

当我点击页面刷新但不更改语言时,我必须单击两次才能更改语言。

2 个答案:

答案 0 :(得分:3)

如果您正在更改控制器中的会话,则需要在执行此操作后重新加载。尝试这样的事情:

/**
 * @Route("/{lang}", name="homepage_lang")
 * @param Request $request
 * @param $lang
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function indexLangAction(Request $request, $lang)
{
    $session = $this->get('session');
    if ($session->has("_locale") && $lang !== $session->get("_locale")) {
        $session->set("_locale", $lang);
        return new RedirectResponse('/' . $lang);
    }

    return $this->render('default/index.html.twig', [
        'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
    ]);
}

答案 1 :(得分:2)

最简洁的方法是使用指向路线的链接:

<a href="{{ path('homepage_lang') }}" title="Español">Español</a>
// if you are using bootstrap as a CSS framework then add the btn class
// so the link will look like a button
<a href="{{ path('homepage_lang') }}" title="Español" class="btn btn-primary">Español</a>

修改

// for a route with parameters, you can use the following
<a href="{{ path('homepage_lang', {'lang': 'es'}) }}" title="Español" class="btn btn-primary">Español</a>

<强> EDIT2

似乎单独更改区域设置的事实不会立即生效,您需要以某种方式执行重定向,请参阅此问题,您将找到更多详细信息,而您甚至可以采用最佳实践并为此添加您的事件监听器。

User locale does not work at first request