注册验证时,Silex转换将停止工作

lee*_*our 8 symfony silex

我用YAML注册了TranslationServiceProvider,它运行正常:

$app->register(new TranslationServiceProvider(), array(
    'locale_fallback' => 'ru',
));

$app['translator'] = $app->share($app->extend('translator', function($translator, $app) {
    $translator->addLoader('yaml', new YamlFileLoader());
    $translator->addResource('yaml', CONTENT_PATH . '/locales/en.yml', 'en');
    return $translator;
}));
Run Code Online (Sandbox Code Playgroud)

然后我注册ValidationServiceProvider,如下所示:

$app->register(new Silex\Provider\ValidatorServiceProvider());
Run Code Online (Sandbox Code Playgroud)

当我注册验证时,翻译停止工作.应翻译的所有字符串都不会被翻译而没有错误.我正在改变countroller中的语言环境,所以它可能与它有关:

$en->get('/{slug}', function (Silex\Application $app, $slug) {
    $app['locale'] = 'en';
Run Code Online (Sandbox Code Playgroud)

Zhu*_*ukV 0

因此,所有服务(来自服务提供商)在运行时、请求之前、创建过程中获取区域设置。而且,如果未提供真实的语言环境,翻译器将获取后备语言环境。

问题:您无法在运行时更改区域设置,因为区域设置是一个变量并且不以链接形式呈现(如果区域设置将是对象,您可以更改区域设置)。

解决方案:根据请求订阅者更改/设置区域设置。