2017-01-15 48 views
0

如何處理create()中的許多重複參數。我喜歡看起來整潔和可讀。如何處理重複的參數?

例如在控制器中,我們有addList()方法,它有許多參數。

public function addList(CreateListRequest $request) 
{ 
    $created = $this->list->create(
        $request->user(),    
        $request->name, 
        $request->subject, 
        $request->description, 
        $request->location, 
        $request->do_email, 
        $request->provider, 
        $request->something1, 
        $request->something2, 
       ); 
} 

List類,我們有一個創建方法也很多重複性的許多參數。並在$this->api->create()$this->listRepository->create()這也是有點重複。有沒有辦法清理這個或重構這個?

class List 
{ 
    public function create($user, $name, $subject, $description, $location, $doEmail, $provider, $something, $something2) 
    { 
     $list = $this->api->create($name, $subject, $description, $location); 

     if ($list->status == "success") { 
      // Add to database 
      $row = $this->listRepository->create($user->id, $name, $subject, $description, $location, $doEmail, $provider, $something, $something2); 
      return $row; 
     } 

     return false; 
    } 
} 
+0

在我看來,'create()'方法需要的唯一參數是'$ request'變量。其他對象使用的'create()'方法是否都共享相同的簽名? – jeroen

+2

我會考慮發佈到http://codereview.stackexchange.com/ – JimL

+0

'ListForm'類是否適合你的結構?在Symfony中,您創建表單類,將請求傳遞給它,並根據請求填充表單數據,也可以擴展以進行驗證等。如果是這樣,你可以在addList中做這樣的事情:'$ form = new ListForm(); $形式 - >的handleRequest($請求); $ created = $ this-> list-> create($ form);'然後List :: create可以是'create(ListForm $ form)'這會給自動完成等等 – JimL

回答

0

傳遞請求對象是好的,而不是單獨地發送所述每 參數。

public function addList(CreateListRequest $request) { 
    $created = $this->list->create($request); 
} 

在List類,由於請求對象反正具有用戶會話, 簡單地傳遞該請求對象類listRepository。

class List { 

    public function create($request) { 

     $list = $this->api->create($request->only(['name', 'subject', 'description', 'location'])); 

     if ($list->status == "success") { 
      $row = $this->listRepository->create($request); 
      return true; 
     } 

     return false; 
    } 
} 
+0

如果您想通過瀏覽器不經請求創建該怎麼辦? –

+0

我不明白你的意思。你的意思是通過API? –

+0

我的意思是我可能不想通過瀏覽器調用'list-> create()'。比方說通過控制檯或其他類與http請求無關。 –