Laravel 5 在 API 条路线上应用用户本地化
Laravel 5 Apply user localization on API routes
我按照 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);
}
} ...
我不知道我做的对还是错。如何改进这个解决方案?提前致谢!
您可以将用户的区域设置存储在数据库中。然后,用户 object 将在每个经过身份验证的请求中获取,然后您可以使用它的语言环境。如果 api 中没有身份验证或者您需要将语言环境应用于非身份验证路由,则必须在每个请求中提供语言环境。这可以通过查询字符串或 headers.
编辑:根据您的评论,您的做法是正确的。但是您需要使用基于闭包的中间件来访问经过身份验证的用户。
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);
});
}
我按照 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);
}
} ...
我不知道我做的对还是错。如何改进这个解决方案?提前致谢!
您可以将用户的区域设置存储在数据库中。然后,用户 object 将在每个经过身份验证的请求中获取,然后您可以使用它的语言环境。如果 api 中没有身份验证或者您需要将语言环境应用于非身份验证路由,则必须在每个请求中提供语言环境。这可以通过查询字符串或 headers.
编辑:根据您的评论,您的做法是正确的。但是您需要使用基于闭包的中间件来访问经过身份验证的用户。
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);
});
}