在这两个例子中,Laravel中的函数with()
和compact()
之间的区别是什么:
示例1:
return View::make('books.index')->with('booksList', $booksList);
示例2:
return View::make('books.index',compact('booksList'));
答案 0 :(得分:7)
好compact()
是PHP function,它将变量列表转换为关联数组,其中键是变量名,值是该变量的实际值。
实际问题应该是:
之间有什么区别return View::make('books.index')->with('booksList', $booksList);
和
return View::make('books.index', array('booksList' => $booksList));
答案并非如此。它们都会向视图数据添加项目。
语法方式,View::make()
只接受一个数组,with()
同时接受两个字符串:
with('booksList', $booksList);
或者一个可能包含多个变量的数组:
with(array('booksList' => $booksList, 'foo' => $bar));
这也意味着compact()
也可以与with()
一起使用:
return View::make('books.index')->with(compact($booksList));
答案 1 :(得分:1)
compact方法将数组数据传递给Constructor,Constructor存储到$data
Class属性:
public function __construct(Factory $factory, EngineInterface $engine, $view, $path, $data = array())
{
$this->view = $view;
$this->path = $path;
$this->engine = $engine;
$this->factory = $factory;
$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
}
虽然with()
方法接受数组或字符串,但如果它是数组,它会对参数执行array_merge,否则会将数据附加到您作为参数传递给$data
的键中属性,所以如果使用构造函数,则必须传递array
,而with()
接受带有值的单个键。
public function with($key, $value = null)
{
if (is_array($key))
{
$this->data = array_merge($this->data, $key);
}
else
{
$this->data[$key] = $value;
}
return $this;
}