2017-01-15 10 views
0

create()で多くの繰り返しパラメータを処理する方法。私はきれいに見えるし、読むことが好きです。繰り返しパラメータを扱うにはどうすればいいですか?

たとえば、コントローラには、多くのパラメータを持つaddList()メソッドがあります。我々はこれも多くの反復的な多くのパラメータのメソッドを作成する必要がありListクラスで

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, 
       ); 
} 

。そして、$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(); $ form-> handleRequest($ request); 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リクエストとは何の関係もないコンソールや他のクラスを介して言いましょう。 –

関連する問題