似乎有两种最常用的方法将数据传递给视图,虽然有几个问题要求两个函数之间存在差异,但是我没有看到单个stackoverflow的答案来解释它们是否可以互换,这是使用的更常见的是,如果它们不可互换,在什么情况下使用这两个函数。
答案 0 :(得分:7)
compact()是一个标准的PHP函数,它从变量列表构建数组,将变量名称指定为数组元素键,将变量值指定为数组元素值。它可以用作将变量传递给Laravel中的视图的便捷方式,因为Laravel的View::make()
将接受键/值对数组的第二个参数。
您可以轻松指定键/值对的数组,但PHP compact()
提供了一种简单的方法。
$x = "Hello";
$y = "world";
$view = View::make('myViewName', compact('x', 'y');
与
相同$x = "Hello";
$y = "world";
$view = View::make('myViewName', ['x' => $x, 'y' => $y]);
但是compact()
您的变量必须已存在。手动指定数组更灵活,因为您可以执行
$x = "Hello";
$y = "world";
$view = View::make('myViewName', ['salutation' => $x, 'addressTo' => $y]);
会在您的刀片模板中提供名为$salutation
和$addressTo
的变量,即使您的原始变量只是名为$x
和$y
。
或者你甚至可以做
$view = View::make('myViewName', ['salutation' => "Hello", 'addressTo' => "world"]);
with()
是特定于Laravel的,并且(在此View构建上下文中)允许您指定要传递给视图的各个键和值。主要区别在于您可以将密钥名称指定为您想要的任何内容(与使用您自己构建的数组作为View::make()
的第二个参数的方式非常相似),并且值可以是从功能调用。
$x = "Hello";
$y = "world";
$view = View::make('myViewName')->with('x', $x)->with('y', $y);
或
$view = View::make('myViewName')->with('x', "Hello")->with('y', "World");
或
$view = View::make('myViewName')
->with('salutation', "Hello")
->with('addressTo', "World");
它基本上与将用户构建的数组传递给View::make()
相同,但可以说更具可读性
在这两种情况下,键/值对(无论是通过View::make()
的第二个参数指定还是使用with()
)都是在刀片模板中提取的,其中键用于元素名称。
这两种方法甚至可以一起使用。