簡體   English   中英

如何使用Laravel框架在應用程序控制器之間共享代碼?

[英]How share code between application controllers using Laravel framework?

使用Laravel分發控制器代碼的最佳實踐是什么?

示例:TaskController使用特定請求並使用任務列表訪問特定的模型方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM