首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 2.8:如何本地化页面名称在变量中的URL?

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

Stack Overflow用户
提问于 2020-06-10 17:24:36
回答 1查看 96关注 0票数 0

我正在管理一个用Symfony 2.8开发的项目。在其中,除了业务逻辑部分之外,还有几个静态页面,原始开发人员通过在控制器中创建一个方法来处理它们:

代码语言:javascript
复制
   /**
     * @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中

代码语言:javascript
复制
pages:
    path: /{page}/
    defaults: { _controller: AppBundle:Default:pages }

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

代码语言:javascript
复制
<a href="/{{ app.request.locale }}/{{ 'static_page'|trans }}">

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

代码语言:javascript
复制
pagina_estatica.html.twig
static_page.html.twig

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-11 13:26:25

有多种方法可以解决这个问题,但我认为最简单的解决方案是在控制器中实现某种映射。

您可以轻松地将开关案例导出到服务或静态方法中,以便在不同的地方使用它。

在这个例子中,我引入了一个新的变量$templateFile,以使它更清晰。

代码语言:javascript
复制
   /**
     * @Route("/{page}/", name="pagina")
     */
    public function pagesAction(Request $request, $page)
    {
        // translated page name to template mapping
        switch($page){
            case 'pagina_estatica':
                $templateFile = 'static_page';
                break;
            default:
                $templateFile = $page;
        }

        if (!$this->get('templating')->exists('default/'. $templateFile . '.html.twig')){
            throw new NotFoundHttpException();
        }

        return $this->render('default/' . $templateFile . '.html.twig');
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62300112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档