Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用默认的'_地点';何时未在Silex中的URI中设置?_Php_Symfony_Internationalization_Silex - Fatal编程技术网

Php 如何使用默认的'_地点';何时未在Silex中的URI中设置?

Php 如何使用默认的'_地点';何时未在Silex中的URI中设置?,php,symfony,internationalization,silex,Php,Symfony,Internationalization,Silex,我想像这样声明路由:/{u locale}/some/route,这可以用Silex轻松完成 但是,我还希望自动使/some/route与默认语言环境(例如:“en”)一起可用,而不必在请求URI中指定它。这样,请求/some/route与请求/en/some/route相同 如果我没记错的话,这个问题已经为Symfony2解决了,但是我找不到Silex的任何东西 我只知道我可以使用$app['controllers']->assert('u locale','en'fr'es')->value

我想像这样声明路由:
/{u locale}/some/route
,这可以用Silex轻松完成

但是,我还希望自动使
/some/route
与默认语言环境(例如:“en”)一起可用,而不必在请求URI中指定它。这样,请求
/some/route
与请求
/en/some/route
相同

如果我没记错的话,这个问题已经为Symfony2解决了,但是我找不到Silex的任何东西

我只知道我可以使用
$app['controllers']->assert('u locale','en'fr'es')->value('u locale','en')
全局应用这些方法。但我仍然需要声明重复的路由,我想我还需要修改“url\U生成器”或细枝助手

有什么想法吗?

看看这个。您可以看到如何重定向到首选区域设置

// app.php

$app['config.locales.regexp'] = 'ca|es|en';


// controllers.php

/**
* Index URL, automatic redirect to preferred user locale
*/
$app->get('/', function (Silex\Application $app) {
    $locale = $app['request']->getPreferredLanguage($app['config.locales']);

    return $app->redirect(
        $app['url_generator']->generate('homepage', array('locale' => $locale))
    );
});
编辑: 我认为我上面描述的解决方法并不能解决这个问题,它只适用于索引URL。但另一种可能的解决方案是在应用程序初始化后设置默认区域设置,如本文所述


我发现这是最好的解决方案(Silex 2.0):

定义'locale'=>'en'。这是将使用的默认区域设置


来源:

这个问题很老,但现在您可以使用
Silex locale
()使您的路线如下所示:

/some/route
/en/some/route
/fr/some/route
etc.
根据您的Silex版本阅读文档以使用它,但以下是如何使用它:

1/加载提供程序

$app->register(new Pmaxs\Silex\Locale\Provider\LocaleServiceProvider(), [
    'locale.locales' => ['en', 'ru', 'es'], // the locales you will use in your website
    'locale.default_locale' => 'en',        // the default locale
    'locale.resolve_by_host' => false,
    'locale.exclude_routes' => ['^_'],
]);
2/用法

// will be accessible by urls `/`, `/en/`, `/ru/`, `/es/`
$app->get('/', function (Request $request) use ($app) {
    return new Response('index ' . $request->getLocale());
})->bind('index');

// will be accessible by urls `/test/123`, `/en/test/123`, `/ru/test/123`, `/es/test/123`
$app->get('/test/{var}', function(Request $request) use ($app) {
    return new Response('test ' . $request->getLocale() . ' ' . $request->get('var'));
})->bind('test');

你也有方法生成URL,希望它能帮助今天有这个问题的人

感谢您尝试回答这个(非常古老的!)问题——但是您能否编辑您的答案,详细说明您的答案如何解决原始海报的问题,也许可以通过描述您链接到的存储库及其作用来实现?我仍然对这个问题感兴趣,但这个答案并不能真正解决它。我不想重定向,我想立即显示页面,就像在Symfony2中一样。
$app->register(new Pmaxs\Silex\Locale\Provider\LocaleServiceProvider(), [
    'locale.locales' => ['en', 'ru', 'es'], // the locales you will use in your website
    'locale.default_locale' => 'en',        // the default locale
    'locale.resolve_by_host' => false,
    'locale.exclude_routes' => ['^_'],
]);
// will be accessible by urls `/`, `/en/`, `/ru/`, `/es/`
$app->get('/', function (Request $request) use ($app) {
    return new Response('index ' . $request->getLocale());
})->bind('index');

// will be accessible by urls `/test/123`, `/en/test/123`, `/ru/test/123`, `/es/test/123`
$app->get('/test/{var}', function(Request $request) use ($app) {
    return new Response('test ' . $request->getLocale() . ' ' . $request->get('var'));
})->bind('test');