控制器的可重用功能放在哪里

Where to put reusable functions of Controller

我创建了一个函数,例如getAllCitiesOfLocations()。这个功能为我提供了城市的聚合。我想让这个功能像例如用于ServiceController的索引函数。在索引函数内部,我想调用函数 getAllCitiesOfLocations() 来获取信息,然后将其传递给视图。

但是,我要提醒,从另一个控制器调用函数是不正确的风格。此外,我红了,我应该创建一个助手 class。不幸的是,当我搜索有关如何创建助手 class 的信息时,我只找到有关为视图创建助手 classes 的信息。你能告诉我吗

1.) 我应该把函数放在哪里,如果需要的话应该由不同的控制器调用,

2.) 当它不在同一个控制器中时,我如何稍后调用该函数?

  public function getAllCitiesOfLocations(){
    $cities = DB::table('locations')
                ->select('city')
                ->groupBy('city')
                ->get();
    return $cities;
  }

这种功能属于模型,而不属于控制器。一般来说,如果它处理数据库,你把东西放在模型中。

你可以像这样使用助手class

 namespace App\Services;

 class Helper {

      public static function getAllCitiesOfLocations(){
           // Code goes here
      }

 }

我通常将其存储在 app/services 文件夹中,但您可以将其放在任何您喜欢的位置。然后在您的控制器中,您可以像这样访问它们:

 App\Services\Helper::getAllCitiesOfLocations();

您还可以让 laravel 自动加载此 class,方法是将其添加到 config/app.php

中的别名数组中
 'Helper' => App\Services\Helper::class

然后当从您的助手 class 调用方法时,您只需

  Helper::getAllCitiesOfLocations();

你想要做的是拥有一个模型。然后,您可以在任何您想要的控制器中使用该模型。

请阅读 http://requiremind.com/a-most-simple-php-mvc-beginners-tutorial/ 以开始使用 MVC 模型。