我对以下问题感到困惑:如果所有控制器(例如,具体控制器的方法)都有通用的代码,可以检测模型请求的可用语言:
public function language(Request $request)
{
$languages = ["en", "it"];
$default = "en";
return in_array($request->language, $languages) ? $request->language : $default;
}
因此,某些控制器包含此方法,我认为这是不对的:
Model::where("Lang", this.language())->get();
在哪里退出此方法language()
以避免在每个控制器中重复代码?应该使用注入服务还是简单的静态类帮助程序?
答案 0 :(得分:2)
有很多方法可以实现您想要的。这是您可以做的一个例子。由于此功能似乎与请求相关联,您可以将其作为宏添加到请求中:
在您的一家服务提供商中进行:
Illuminate\Http\Request::macro('getLanguage', function () {
$languages = ["en", "it"];
$default = "en";
return in_array($this->language, $languages) ? $this->language : $default;
});
然后您可以将其用作请求的一部分,例如:
request()->getLanguage(); //using the helper
Request::getLanguage(); //Using the request facade
$request->getLanguage(); //If you already have a request object.