laravel compact()和 - > with()

时间:2014-03-14 18:18:46

标签: php laravel-4

我有一段代码,我试图找出为什么一种变体有效而另一种无效。

return View::make('gameworlds.mygame', compact('fixtures'), compact('teams'))->with('selections', $selections);

这允许我按照预期生成固定装置,团队和选择的数组视图。

然而,

return View::make('gameworlds.mygame', compact('fixtures'), compact('teams'), compact('selections'));

允许正确生成视图。我仍然可以回显数组并获得预期的结果,但是一旦到达选择部分,视图就不会呈现。

没关系,因为我使用->with()语法但只是奇怪的。

感谢。 DS

7 个答案:

答案 0 :(得分:38)

View::make函数采用 3 参数,根据文档是:

public View make(string $view, array $data = array(), array $mergeData = array())

在您的情况下,compact('selections') 4th 参数。它没有传递给视图,而laravel会抛出异常。

另一方面,您可以根据需要使用with() 。因此,这将起作用:

return View::make('gameworlds.mygame')

->with(compact('fixtures'))

->with(compact('teams'))

->with(compact('selections'));

答案 1 :(得分:13)

我只想跳到这里并纠正(建议替代)前一个答案......

你实际上可以以相同的方式使用紧凑,但是更整洁,例如......

return View::make('gameworlds.mygame', compact(array('fixtures', 'teams', 'selections')));

或者,如果您使用的是PHP> 5.4

return View::make('gameworlds.mygame', compact(['fixtures', 'teams', 'selections']));

这是更整洁,在查看应用程序的功能时仍然允许可读性;)

答案 2 :(得分:8)

我能够使用

return View::make('myviewfolder.myview', compact('view1','view2','view3'));

我不知道是不是因为我使用PHP 5.5它很棒:)

答案 3 :(得分:1)

对我来说最好的方式:

    $data=[
'var1'=>'something',
'var2'=>'something',
'var3'=>'something',
      ];
return View::make('view',$data);

答案 4 :(得分:0)

Route::get('/', function () {
    return view('greeting', ['name' => 'James']);
});
<html>
    <body>
        <h1>Hello, {{ $name }}</h1>
    </body>
</html>

public function index($id)
{
    $category = Category::find($id);
    $topics = $category->getTopicPaginator();
    $message = Message::find(1);

    // here I would just use "->with([$category, $topics, $message])"
    return View::make('category.index')->with(compact('category', 'topics', 'message'));
}

答案 5 :(得分:0)

Laravel框架5.6.26

返回多个数组,然后使用compact('array1', 'array2', 'array3', ...)返回视图。

viewblade 是前端(视图)刀片。

return view('viewblade', compact('view1','view2','view3','view4'));

答案 6 :(得分:0)

您可以将变量数组传递给协定 例如:

return view('yourView', compact(['var1','var2',....'varN']);

视图: 如果var1是一个对象 你可以用这样的东西

@foreach($var1 as $singleVar1)
    {{$singleVar1->property}}
@endforeach

如果是单个变量,您可以简单地

{{$var2}}

我已经多次这样做了,没有任何问题