Symfony 2.8:如何本地化页面名称在变量中的 URL?

我正在维护一个用 Symfony 2.8 开发的项目。其中,除了业务逻辑部分,还有几个静态页面,原开发者是通过在controller中创建一个方法来处理的:


   /**

     * @Route("/{page}/", name="pagina")

     */

    public function pagesAction(Request $request, $page)

    {

        if (!$this->get('templating')->exists('default/'. $page . '.html.twig')) {

            throw new NotFoundHttpException();

        }


        return $this->render('default/' . $page . '.html.twig');

    }

然后将其添加到routing.yml:


pages:

    path: /{page}/

    defaults: { _controller: AppBundle:Default:pages }

现在我需要本地化这些静态页面 URL,我想知道如何去做。我可以手动在 HTML 模板中生成 URL:


<a href="/{{ app.request.locale }}/{{ 'static_page'|trans }}">

但是我需要有几个不同的静态 HTML 模板,其中包含每个本地化页面的名称:


pagina_estatica.html.twig

static_page.html.twig

等等 我宁愿每个静态页面都有一个 HTML 模板,即使其中的内容已本地化。


该应用程序使用 JMSTranslationBundle 来翻译 Twig 模板中的字符串。我可以从控制器内部访问 JMS 翻译文件,以便$page从其翻译中获取规范名称吗?还有其他方法可以解决这个问题吗?


哔哔one
浏览 84回答 1
1回答

胡子哥哥

有多种方法可以解决这个问题,但我认为最简单的解决方案是在控制器中实现某种映射。您可以轻松地将 switch case 导出到服务或静态方法,以便在不同的地方使用它。在示例中,我引入了一个新变量$templateFile以使其更加清晰。&nbsp; &nbsp;/**&nbsp; &nbsp; &nbsp;* @Route("/{page}/", name="pagina")&nbsp; &nbsp; &nbsp;*/&nbsp; &nbsp; public function pagesAction(Request $request, $page)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; // translated page name to template mapping&nbsp; &nbsp; &nbsp; &nbsp; switch($page){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 'pagina_estatica':&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $templateFile = 'static_page';&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $templateFile = $page;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if (!$this->get('templating')->exists('default/'. $templateFile . '.html.twig')){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new NotFoundHttpException();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return $this->render('default/' . $templateFile . '.html.twig');&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP