2017-01-15 28 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请求无关。 –