如何根据要在视图中使用的路径为集合分配属性?

时间:2016-05-16 20:47:42

标签: laravel-5

我想要完成的是一个完整的调查索引,要转换为JSON以便与javascript(vue)一起使用。当用户在定义了调查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请求。

那么,是否有更好的方法将此逻辑添加到集合中而无需通过视图编辑器,循环每个调查并将其与路由参数进行比较以在当前调度上添加活动标志?

1 个答案:

答案 0 :(得分: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'));
    });
}