2017-01-15 9 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()', используемый другими объектами, и все они имеют одну и ту же подпись? – 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-запросом. –