2016-05-16 2 views
0

Was ich versuche zu erreichen, ist ein vollständiger Index der Umfragen, die in JSON für die Verwendung mit Javascript (vue) konvertiert werden. Wenn sich der Benutzer auf einer Route mit einer definierten Umfrage-ID (dh:/survey/1) befindet, wird diese Instanz in der Sammlung aktiviert = true.Wie kann ich einer Sammlung basierend auf der in der Ansicht zu verwendenden Route eine Eigenschaft zuweisen?

Momentan ist meine Lösung, einen View-Composer zu verwenden, um jede Umfrage durchzugehen und sie mit den aktuellen Routenparametern zu vergleichen.

class AppComposer 
{ 

    /** 
    * @param Survey $surveys 
    */ 
    public function __construct(Survey $surveys) 
    { 
     $allSurveys = $surveys->all()->toArray(); 
     if (!empty($surveyId = Route::current()->parameters()['survey'])){ 
      foreach ($allSurveys as $index => $survey){ 
       $allSurveys[$index]['active']=false; 
       if ($survey['id'] == $surveyId){ 
        $allSurveys[$index]['active']=true; 
       } 
      } 

     } 
     $this->allSurveys=$allSurveys; 

    } 

    /** 
    * Bind data to the view. 
    * 
    * @param View $view 
    * @return void 
    */ 
    public function compose(View $view) 
    { 
     $view->with('appData', $this->allSurveys); 
    } 
} 

Ich bin ziemlich neu in Laravel, aber ich weiß, dass es einen einfacheren Weg zu diesem gibt.

Ich würde es vorziehen, keine separate HTTP-Anfrage mit Vue-Ressource zu machen.

Also gibt es eine bessere Möglichkeit, diese Logik der Sammlung hinzuzufügen, ohne einen View Composer durchlaufen zu müssen, jede Umfrage durchzugehen und sie mit den Routenparametern zu vergleichen, um ein aktives Flag auf dem aktuellen hinzuzufügen?

Antwort

0

Vereinfachte Verwendung von Laravel.

public function __construct(Survey $surveys) 
{ 
    $this->allSurveys = $surveys->all()->sortBy('status')->each(function ($item, $key) { 
     $item->active = ($item->id == Route::current()->getParameter('survey')); 
    }); 
} 
Verwandte Themen