laravel返回页面一个数组,还要再compact()一次吗?
demo:
public function index()
{
$articles = user()->articles;
$multiplied = $articles->map(function ($item, $key) {
$item->tags = ['foo', 'bar'];
return $item;
});
$newArticles = $multiplied->all();
dd($newArticles); //是一个数组
return view('articles', compact('newArticles'));
}
dd($newArticles)
的结果是这样:
array:2 [▼
0 => Article {#498 ▶}
1 => Article {#501 ▶}
]
问题:
最后一句返回到视图的语句怎么不加compact()不行?
return view('articles', $newArticles);//这样写不行,会显示Undefined variable: newArticles
return view('articles', compact('newArticles'));//$newArticles已经是数组了,怎么还要加一个compact()?
这个是其实说到底是 函数
extract
的使用问题, 之所以你在视图的上下文中可以使用到newArticles
, 就是它的作用。extract
会把关联数组 将变量从数组中导入到当前的符号表中。如
所以,你肯定想在视图中有个变量指向这个数组,而不是把这个数组整个
extract
到视图里,如果不compact
,你都没法循环这个文章列表了。如果不加,你还是需要传入一个数组, 如
['articles' => $newArticles]
。