Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.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 从laravel到现场工作的翻译路线_Php_Laravel_Routes_Laravel 5_Laravel 5.1 - Fatal编程技术网

Php 从laravel到现场工作的翻译路线

Php 从laravel到现场工作的翻译路线,php,laravel,routes,laravel-5,laravel-5.1,Php,Laravel,Routes,Laravel 5,Laravel 5.1,我的laravel web应用程序以两种不同的语言运行,我使用一种路由来设置它,如下所示: Route::get('/br', function (Illuminate\Http\Request $request) { return Redirect::to('/')->withCookie(cookie()->forever('locale', "pt-br")); }); 这很好,但并不适用于网站上的所有页面,只适用于路线本身(myapp.com/br) 我想用我的用户

我的laravel web应用程序以两种不同的语言运行,我使用一种路由来设置它,如下所示:

Route::get('/br', function (Illuminate\Http\Request $request) {
    return Redirect::to('/')->withCookie(cookie()->forever('locale', "pt-br"));
});
这很好,但并不适用于网站上的所有页面,只适用于路线本身(myapp.com/br)

我想用我的用户的语言发送链接,使用url字符串定义链接,然后将用户重定向到页面本身,可以是任何页面,例如:

这会将语言设置为葡萄牙语,然后将它们重定向到定价或网站上URL中包含/pt的任何其他页面

基本上,我需要一个通配符检查“/pt”是否在URL中,最好是通过路由

我知道我可以用url字符串来实现这一点,比如:

Route::get('/br', function (Illuminate\Http\Request $request) {
    return Redirect::to('/')->withCookie(cookie()->forever('locale', "pt-br"));
});

但这似乎有点偏离我的发展模式

所以,我需要这样的东西:

Route::get('/br/%anything', function (Illuminate\Http\Request $request) {
    return Redirect::to('/%anything')->withCookie(cookie()->forever('locale', "pt-br"));
});

有没有办法在laravel使用route?请先注册您的语言:

Route::bind('lang', function($lang){
    $langs = [
        'br' => 'pt-br',
        'pt' => 'pt-pt',
    ];

    return $langs[$lang];
});
然后为页面的标识符添加一个模式:

Route::pattern('page', '[a-z]+');
现在,根据
lang/page
url进行重定向:

Route::get('{lang}/{page}', function($lang, $page){
    return redirect()
           ->route($page)
           ->withCookie(cookie()->forever('locale', $lang));
});
结果:

  • myapp.com/pt/pricing->myapp.com/pricing(带有
    pt
    at cookie)
  • myapp.com/br/pricing->myapp.com/pricing(带有
    br
    at cookie)
  • myapp.com/auth/login->将不会重定向

如果用户访问其他页面,例如myapp.com/auth/login,该怎么办?它不会重定向到/login,并使用'auth'作为cookie吗?不,它不会使用cookie重定向,因为只有当url的第一段只有两个字母时,
{lang}
pattener才会被识别。哦,我明白了。。还有一件事我没有得到。。在Route::pattern('page','a-z]+');为什么“页面”也被传递?没有真正了解图案部分的工作原理。。对不起,我对这个有点陌生。考虑到在官方文件中读到更多,有一些很酷的事实。