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

问题描述 投票:0回答:1

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

   /**
     * @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模板中的URLs。

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

但是我需要有几个不同的静态HTML模板 用每个本地化页面的名字。

pagina_estatica.html.twig
static_page.html.twig

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

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

php symfony symfony-2.8
1个回答
1
投票

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

你可以很容易地将开关案例导出为服务或静态方法,以便在不同的地方使用它。

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

   /**
     * @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');
    }
© www.soinside.com 2019 - 2024. All rights reserved.