我遵循了这个link的教程。
是的,它在我的网络路线上工作得很好。我有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);
}
} ...
我不知道我做对还是错。如何改进这个解决方案?提前谢谢!
答案 0 :(得分: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);
});
}