2016-05-16 9 views
0

私が達成しようとしているのは、javascript(vue)で使用するJSONに変換する調査の完全なインデックスです。ユーザーがアンケートIDが定義されたルート上にいる場合(つまり:/ survey/1)、そのコレクションのインスタンスはactive = trueになります。ビューで使用するルートに基づいてコレクションにプロパティを割り当てるにはどうすればよいですか?

私の解決策は、各調査をループして現在のルートパラメータと比較するためにビューコンポーザを使用することです。

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

私はLaravelの新機能ですが、これにはもっと簡単な方法が必要です。

私は、vue-resourceを使用して別々のhttpリクエストを作成しないことをお勧めします。

ビューコンポーザーを実行しなくても、このロジックをコレクションに追加し、各調査をループして、ルートパラメータと比較して現在のフラグをアクティブなフラグに追加することができます。

答えて

0

Laravelを使用して簡略化されています。

public function __construct(Survey $surveys) 
{ 
    $this->allSurveys = $surveys->all()->sortBy('status')->each(function ($item, $key) { 
     $item->active = ($item->id == Route::current()->getParameter('survey')); 
    }); 
} 
関連する問題