如何在语言环境之后获取URL路径" us_en"在Laravel 5.4中?

时间:2017-04-07 15:45:29

标签: laravel request

我是Laravel的新手,我试着抓住路线,一切都在地方之后(" us_en /")。

这是我的控制器

<?php

namespace App\Http\Controllers\SitePublic;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\App;

class HomeController extends Controller
{
    public function index(Request $request,$account,$location) {

        dd($request->path());

        $loc=explode("_", $location);
        $locale = $loc[0];
        $lang= $loc[1]; 
        App::setLocale($lang);


        return view('homeProfPublic')->with(['account' => $account,'active' => 'home','lang'=>$lang,"locale"=>$locale]);  
    }

}

现在我使用$ request-&gt; path()来获取路线中的所有内容。

我的路线图就像这样

    mySite.com/userAccount                   =>User's home page with English as default language
    mySite.com/userAccount/us_sp             =>User's home page in Spanish 
    mySite.com/userAccount/us_sp/contact     =>User's contac page in Spanish
    ...

所以 $ request-&gt; path()可以给我完整的URL,我可以使用php explode来获取所有的语言环境(如果是这种情况)。

所以我的问题是,是否在Laravel中已经完成了一些功能或方法来解决这种情况?如果是的话是什么?

1 个答案:

答案 0 :(得分:0)

您不需要使用$ request 如果正确设置路径:您可以在控制器功能中接收参数

您可以设置3条路线来分隔不同功能中的逻辑或使用可选参数分隔逻辑

Route::get('/userAccount/{language?}/{method?}', 'YourController@index');

然后,在控制器中指定参数的默认值:

public function index($language=null, $method=null) {
    list($locale, $lang) = explode('_', $language);
    var_dump($locale);
    var_dump($lang);

    var_dump($method);
}

您将获得url / userAccount / us_sp / contact

  

string'us'(length = 2)

     

string'sp'(length = 2)

     

字符串'contact'(长度= 7)


更新您可以创建中间件并处理所有网址

php artisan make:middleware ProcessLanguageRoutes

您需要在app / Http / Kernel.php文件中注册中间件

protected $middlewareGroups = [
    'web' => [
       ...
        \App\Http\Middleware\ProcessLanguageMenu::class,
    ],

然后,您可以在handle函数中处理数据,检查$ request变量

public function handle($request, Closure $next)
{

    if ($request) { // check something
        // do something
    }

    return $next($request);
}