php - Symfony 更改应用程序区域设置未在主页显示正确的链接
问题描述
我正在尝试将项目翻译成英语,我已将所有路线注释更改为多种语言样式:
我正在使用 symfony 4.2
/**
* @Route({
* "nl": "/",
* "en": "/en"
* })
*/
public function indexAction(Request $request)
这是我的示例的链接:
<a class="customerservice" href="{{ path('web_page') }}">
<i class="fal fa-headset" aria-hidden="true"></i> Klantenservice
</a>
这是链接所在的控制器:
/**
* @Route({
* "nl": "/klantenservice{slug}",
* "en": "/en/customer-service{slug}"
* }, name="web_page", requirements={"slug": ".+"})
*/
public function pageAction($slug = '/')
{
/** @var WebPageRepository $repository */
$repository = $this->getDoctrine()->getRepository(WebPage::class);
if (!$webPage = $repository->findOneBy(['slug' => $slug])) {
return $this->redirectToRoute("web_page");
}
return $this->render('@FrontOffice/WebPage/page.html.twig', [
'page' => $webPage,
'pages' => $repository->getAllForMenu()
]);
}
如果需要,我会分享我的 localeListner:
<?php
namespace FrontOfficeBundle\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class LocaleListener implements EventSubscriberInterface
{
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) return;
if ( $locale = $request->attributes->get('_locale')) {
$request->getSession()->set('_locale', $locale);
return;
}
$lang = explode('.', $request->getHost());
if (!isset($lang[2]) || !$lang[2]) return;
$request->setLocale($lang[2] == 'be' ? 'nl_BE' : $lang[2]);
}
public static function getSubscribedEvents()
{
return [
// must be registered after the default Locale listener
KernelEvents::REQUEST => [['onKernelRequest', 20]],
];
}
}
参数.yaml:
parameters:
locale: nl
default_date_format: "eee dd-MM-y HH:mm"
product_upload_directory: "%var_path%/upload/"
services:
_defaults:
public: true
autowire: true
bind:
$buckarooTestMode: '%buckaroo_test_mode%'
$buckarooCertificate: '%buckaroo_certificate%'
$buckarooWebsiteKey: '%buckaroo_website_key%'
路线.yaml:
set_session:
path: '/_session'
defaults: { _controller: FrontOfficeBundle\Controller\SessionController::setSessionAction }
plein_search_categories:
path: /zoeken/categorieen/{searchTerm}
defaults: { _controller: FrontOfficeBundle\Controller\CategorySearchController::indexAction, searchTerm: null }
plein_search:
path: /zoeken/{searchTerm}
defaults: { _controller: FrontOfficeBundle\Controller\SearchController::indexAction, searchTerm: null }
plein_search_index:
path: /zoeken/
defaults: { _controller: FrontOfficeBundle\Controller\SearchController::indexAction, searchTerm: null }
plein_catalog_autocomplete:
path: /catalog/autocomplete
defaults: { _controller: FrontOfficeBundle\Controller\AutocompleteController::indexAction }
homepage:
path:
nl: /
en: /en
controller: FrontOfficeBundle\Controller\DefaultController::indexAction
backOfficeRouting:
resource: "@BackOfficeBundle/Controller"
type: annotation
prefix: /intranet
condition: "%intranet% === 1"
esbClientRouting:
resource: "@PleinEsbClientBundle/Controller"
type: annotation
fos_js_routing:
resource: "@FOSJsRoutingBundle/Resources/config/routing/routing-sf4.xml"
core_routing:
resource: "@PleinCoreBundle/Resources/config/routing.yml"
prefix: /
plein_brand:
defaults:
_controller: FrontOfficeBundle\Controller\BrandController::indexAction
path: '/merken/'
plein_brand_router:
defaults:
_controller: FrontOfficeBundle\Controller\BrandController::brandAction
path: '/merken/{slug}/'
plein_review_router:
defaults:
_controller: FrontOfficeBundle\Controller\ReviewController::writeAction
path: '/review/schrijven/{product}/'
plein_review_list:
defaults:
_controller: FrontOfficeBundle\Controller\ReviewController::listAction
path: '/reviews/{product}/'
plein_promotion_router:
defaults:
_controller: FrontOfficeBundle\Controller\CategoryController::promotionsAction
path: '/aanbiedingen/'
themesRouting:
resource: "@FrontOfficeBundle/Controller"
type: annotation
_liip_imagine:
resource: "@LiipImagineBundle/Resources/config/routing.yaml"
frontOfficeRouting:
resource: "@FrontOfficeBundle/Controller"
type: annotation
除主页外的所有页面都可以正常工作,例如当我在个人资料(英语语言环境)时:
http://domain-name.com/en/profile
当我悬停此链接时,它显示:http ://domain-name.com/en/customer-service
但!!!当我在主页时(英语语言环境):
当我悬停相同的链接时,它显示:http ://domain-name.com/klantservice
因此,在两个不同页面上的相同区域设置,但在除主页之外的所有其他页面中,应用程序显示具有正确区域设置的所有链接。在主页上,它始终显示默认值。有什么小费吗?
解决方案
推荐阅读
- dart - Dart - 空运算符
- python - 加载 language_model_learner fastai 的问题
- python-3.x - 带有间隔 xticks 的堆积图
- reactjs - 如果在另一个库中重新导出 NPM 包组件会报错
- javascript - 如何通过javascript从html页面中的特定github txt文件中获取数据
- python - 在不使用python中的库函数的情况下将字符串转换为int或double
- bash - 在作为后台进程启动时处理 bash 脚本中的信号
- reactjs - 创建项目时未获得完整的项目数组。它只返回项目的名称
- facebook - 删除某些评论时的 Facebook 应用程序权限问题
- python - 检查两列的值是否相同,然后在其中一列中填充 nan