1

我按照此链接中的教程进行操作。是的,它与我的网络路由配合得很好。我有 2 个受支持的语言环境,它们是英语(en)和瑞典语(sv)。我将用户的语言环境选择保存到,Session但是,我的应用程序主要由对 API 路由的 ajax 请求组成;所以我的 API 路由不受用户语言环境选择的影响。如何设置 API 路由的本地化?

我在我的控制器上做了类似的事情来解决问题(不确定这样做是否好),但我认为我这样做不对,因为我将在我的每个控制器上添加这段代码。

class UserController extends Controller
{
  function __construct() {
    $user = Auth::guard('api')->user();

    if ($user && $user->lang != "") {
        \App::setLocale($user->lang);
    }
} ...

我不知道我做的是对还是错。如何改进此解决方案?提前致谢!

4

1 回答 1

1

您可以将用户的区域设置存储在数据库中。然后将在每个经过身份验证的请求上获取用户对象,然后您可以从中使用语言环境。如果 api 中没有身份验证,或者您需要将语言环境应用于非身份验证路由,则必须在每个请求中提供语言环境。这可以通过查询字符串或标题。

编辑:根据您的评论,您所做的是正确的。但是您需要使用基于闭包的中间件来访问经过身份验证的用户。

https://laravel.com/docs/5.3/upgrade#session-in-the-constructor

public function __construct()
{
    $this->middleware(function ($request, $next) {
        $user = auth()->guard('api')->user();

        if($user && $user->lang != "" ){
            app()->setLocale($user->lang);
        }

        return $next($request);
    });
}
于 2017-05-19T12:20:17.040 回答