2017-01-15 5 views
0

Wie viele wiederkehrende Parameter in einem create() zu behandeln. Ich mag es, ordentlich und lesbar zu sein.Wie man mit sich wiederholenden Parametern umgeht?

Zum Beispiel haben wir in der Steuerung addList() -Methode mit vielen Parametern.

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

In der List Klasse haben wir ein Verfahren schaffen, die auch viele sich wiederholende viele Parameter. Und in der $this->api->create() und $this->listRepository->create() die auch irgendwie wiederholt wird. Gibt es eine Möglichkeit, dies zu bereinigen oder umzuformen?

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

Es scheint mir der einzige Parameter der 'create()' Methode benötigt, ist die '$ request' Variable. Wird die Methode 'create()' von anderen Objekten verwendet und teilen sie alle dieselbe Signatur? – jeroen

+2

Ich würde in Erwägung ziehen, dies auf http://codereview.stackexchange.com/ – JimL

+0

zu veröffentlichen Würde eine 'ListForm'-Klasse in Ihre Struktur passen? In Symfony erstellen Sie Formularklassen, übergeben die Anfrage und füllen die Formulardaten basierend auf der Anfrage aus, könnten erweitert werden, um Validierungen usw. durchzuführen. Wenn ja, könnten Sie in addList so etwas tun: '$ form = new ListForm(); $ form-> handleRequest ($ Anfrage); $ created = $ this-> list-> create ($ form); 'Und dann könnte List :: create' create (ListForm $ form) 'sein, was automatisches Vervollständigen usw. ergibt. – JimL

Antwort

0

Passing-Request-Objekt ist gut und nicht einzeln die jeden Parameter zu senden.

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

In List-Klasse, da Request-Objekt sowieso Benutzersitzung hat, übergeben einfach das Anfrage-Objekt zu listRepository Klasse.

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

Was ist, wenn Sie ohne Anfrage über den Browser erstellen möchten? –

+0

Ich verstehe dich nicht. Meinst du durch API? –

+0

Ich meine, ich möchte 'list-> create()' nicht über Browser aufrufen. Sagen wir mal via Konsole oder andere Klasse, die nichts mit HTTP-Anfrage zu tun hat. –

Verwandte Themen