Php Symfony-如何切换和使用区域设置
如何在细枝模板中使用区域设置的最佳实践是什么:Php Symfony-如何切换和使用区域设置,php,symfony,twig,symfony-3.3,Php,Symfony,Twig,Symfony 3.3,如何在细枝模板中使用区域设置的最佳实践是什么: 如何在语言之间切换(在模板中使用语言切换器),以及如何仅通过更改语言来保留现有URL 如何使用区域设置支持创建URL 例如: 我有两种语言(ES和EN),默认语言是ES,对于我的主页,我为控制器文件中的/(对于默认语言,在本例中为ES)和/{u locale}/(对于其他语言)创建了两个路由选项 现在我需要将我的分支模板的locale参数设置到我的URL中,但前提是我不使用默认语言 手动重写URL可以很好地工作,但当我在我的小树枝模板上创建时,
- 如何在语言之间切换(在模板中使用语言切换器),以及如何仅通过更改语言来保留现有URL
- 如何使用区域设置支持创建URL
/
(对于默认语言,在本例中为ES)和/{u locale}/
(对于其他语言)创建了两个路由选项
现在我需要将我的分支模板的locale参数设置到我的URL中,但前提是我不使用默认语言
手动重写URL可以很好地工作,但当我在我的小树枝模板上创建时,有没有简单的方法可以将区域设置参数添加到URL
变量locale的实际值可以传递给控制器,但有没有更好的方法在twig中获取它呢
编辑:
/**
* @Route(
* "/{_locale}/branches", name="branches",
* requirements={"_locale":"%app_locales%"}
* )
*
*/
public function indexAction(Request $request) {
return $this->render('branches/index.html.twig');
}
index.html.twig
<li class="{% if app.request.attributes.get('_route') starts with 'branches' %}active{% endif %}">
<a href="{{ path('branches') }}" class="">{{ 'header.menu.branches'|trans }}</a>
</li>
使用路径生成URL是可以的,但如果我在浏览器中从URL中删除区域设置参数,则会出现此错误
非常感谢您提供的有用建议将您的区域设置保存到cookie中,然后在您的小树枝文件中创建链接,如
如果未设置cookie,我不确定您是否会收到错误或空值(这将帮助您在控制器路由中使用默认区域设置),但您应该尝试一下。将区域设置保存到cookie中,然后在您的小树枝文件中创建类似
如果没有设置cookie,我不确定您是否会得到错误或空值(这将帮助您在控制器路由中使用默认区域设置),但您应该尝试一下
转换器的注释:{fallbacks:['%locale%']}
parameters:
locale: en
app.locales: en|lv|ru
/**
* @Route(
* "/branches/", name="branches_def",
* defaults={"_locale":"%locale%"},
* )
* @Route(
* "/{_locale}/branches/", name="branches",
* requirements={"_locale":"%app_locales%"}
* )
*
*/
public function indexAction(Request $request) {
return $this->render('branches/index.html.twig');
}
contact_us:
path: /{_locale}/contact
defaults:
_controller: 'AppBundle:Default:contact'
_locale: '%app.locales%'
另一个路由
是用_locale占位符声明的,则使用{path('other_route')}}
而不带参数。对于单文本翻译,也可以使用{{'home.title'|trans}
转换器的注释:{fallbacks:['%locale%']}
parameters:
locale: en
app.locales: en|lv|ru
/**
* @Route(
* "/branches/", name="branches_def",
* defaults={"_locale":"%locale%"},
* )
* @Route(
* "/{_locale}/branches/", name="branches",
* requirements={"_locale":"%app_locales%"}
* )
*
*/
public function indexAction(Request $request) {
return $this->render('branches/index.html.twig');
}
contact_us:
path: /{_locale}/contact
defaults:
_controller: 'AppBundle:Default:contact'
_locale: '%app.locales%'
另一个路由
是用_locale占位符声明的,则使用{path('other_route')}}
而不带参数。对于单文本翻译,也可以使用{{'home.title'|trans}
根据您的编辑尝试此捆绑包,更好的方法是使用两个单独的操作,并具有自己的注释参数,如我的示例中所示?更好的方法是使用2@Route注释?一个用于locale,另一个用于URL,但不带此参数?如果您知道操作中的逻辑将来会很复杂,那么两个单独的操作将有助于调试和查找潜在错误的原因。但如果没有,您也可以使用as 2@Route注释,它完全可以工作,只需在测试项目上检查它即可。根据您的编辑尝试此捆绑包,更好的方法是使用两个单独的操作,并使用自己的注释参数,如我的示例所示?更好的方法是使用2@Route注释?一个用于locale,另一个用于URL,但不带此参数?如果您知道操作中的逻辑将来会很复杂,那么两个单独的操作将有助于调试和查找潜在错误的原因。但若并没有,你们也可以使用as 2@Route注释,它完全可以工作,只是在测试项目中检查了一下。非常感谢,但它也可以用于会话吗?在最好的方式,我正在寻找一些简单的方法,我怎么能做到这一点。在我看来,这个变量条目太长,无法用于每个URL地址,而且很难使用。我在
app/
中使用我自己的翻译文件,其中一种方法是在每个控制器中添加locale参数,作为twig模板的参数,但是可以在基本控制器中或自动执行此操作?非常感谢,但也可以将此用于会话?在最好的方式,我正在寻找一些简单的方法,我怎么能做到这一点。在我看来,这个变量条目太长,无法用于每个URL地址,而且很难使用。我正在app/
中使用我自己的翻译文件,其中一种方法是在每个控制器中添加locale参数,作为twig模板的参数,但这可以自动执行,也可以在base controller中执行?您好,感谢您的帖子,{{path('other_route')}
将树枝模板中的实际\u locale
参数提供给我的URL?例如,如果我的主页中实际有/en/
路径,并且我需要转到/en/contact/
,那么en
参数是自动添加到我的URL吗?我在一页上使用了两条路线。对于默认lang(/
对于home,/conatcts/
等)和2。对于其他语言(/en/
对于home,/en/conatcts/
,/de/contacts/
等)是的,在您的示例中,en
参数将自动添加到callyok中,非常感谢,我使用了这个/***@Route(*“/{{locale}/branches”,name=“braches”,*requirements={u locales”:“%app u locales%”*)***/
它对/en/branchs
很好,但是当我在没有区域设置的url中使用/branchs
时,我收到错误消息,然后路由/branchs
不存在,在这种情况下,我的控制器中的每个操作都必须有2条路由?在url中,您应该使用路由名称(联系我们),而不是路由路径(/{u locale}/contact})。在此之后,您不应该使用我在控制器路由注释中缺少的第二个路由部分(从您的示例中),这是\u controller:'AppBundle:Default:contact'
,但是当我从URL/en/branch->/branch中删除时,我得到的错误消息路由不存在,在twig中生成的URL现在可以正常工作了,谢谢您的帖子,