首页 > 解决方案 > Laravel中的常用功能?

问题描述

我对以下问题感到困惑:如果所有控制器都有一个通用代码,例如具体控制器的方法,可以检测模型请求的可用语言:

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()避免每个控制器中的代码重复?它应该是注入服务还是简单的静态类助手?

标签: laravellaravel-5

解决方案


有很多方法可以实现您想要的。这是你可以做的一个例子。由于此函数似乎与请求相关联,因此您可以将其作为宏添加到请求中:

在您的服务提供商之一中执行以下操作:

 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.

推荐阅读