我正在管理一个用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模板中的URL:
<a href="/{{ app.request.locale }}/{{ 'static_page'|trans }}">但是,我需要几个不同的静态HTML模板,其中包含每个本地化页面的名称:
pagina_estatica.html.twig
static_page.html.twig等。我宁愿为每个静态页面使用一个HTML模板,即使其中的内容是本地化的。
该应用程序使用JMSTranslationBundle来翻译Twig模板中的字符串。我是否可以从控制器内部访问JMS转换文件,以便从其转换中获得规范的$page名称?有没有其他方法来解决这个问题?
发布于 2020-06-11 13:26:25
有多种方法可以解决这个问题,但我认为最简单的解决方案是在控制器中实现某种映射。
您可以轻松地将开关案例导出到服务或静态方法中,以便在不同的地方使用它。
在这个例子中,我引入了一个新的变量$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');
}https://stackoverflow.com/questions/62300112
复制相似问题