如何使用Laravel框架在应用程序控制器之间共享代码


How share code between application controllers using Laravel framework?

使用 Laravel 分发控制器代码的最佳实践是什么?

例:任务控制器使用特定的请求并访问具有任务列表的特定模型方法。

OrganisationTaskTreeController 使用不同的请求访问任务实体上的相同方法,但也使用与 OrganisationController 共享的方法获取 OrganisationTree 资源。

法典:

class TaskController extends BaseController {
public function getTask(Request $request)
{
    $_match = [];
    if ($request->has('types'))
    {
        $_match['type'] = ['$in' =>  $request->get('types')];
    }
    if ( ! $request->has('group'))
    {
        throw new InvalidParameter("Undefined group parameter");
    }
    ....
}
class OrganisationTaskTreeController extends BaseController  {
public function getOrganizationTree(Request $request)
{
    $_match = [];
    $_tree  = [];
    if ($request->has('types'))
    {
        $_match['type'] = ['$in' =>  $request->get('types')];
    }
    if ( ! $request->has('group'))
    {
        throw new InvalidParameter("Undefined group parameter");
    }
    if ($request->has('unti'))
    {
        $_tree['unit'] = $request->get('unit');
    }
    ....
}

}

如何不复制此代码?

我认为控制器不应该通过设计进行扩展,因为使用许多控制器的方法。这将是矫枉过正。

我在想:

  • 性状
  • HMVC
  • 控制器即服务
  • 还是做一个消耗$request的仓库会很好?

也许你可以重构你想要重用的代码,到两个类可以扩展的基类上的方法,例如类TaskController扩展BaseController,BaseClass。然后,可以在扩展 BaseClass 的每个类上使用该方法。

一个自定义请求对象怎么样,您可以在需要它进行特定验证的任何方法中键入提示? https://www.laravel.com/docs/5.2/validation#form-request-validation