compact()和with()是否可以互换?

时间:2017-08-04 11:03:50

标签: php laravel

似乎有两种最常用的方法将数据传递给视图,虽然有几个问题要求两个函数之间存在差异,但是我没有看到单个stackoverflow的答案来解释它们是否可以互换,这是使用的更常见的是,如果它们不可互换,在什么情况下使用这两个函数。

1 个答案:

答案 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())都是在刀片模板中提取的,其中键用于元素名称。

这两种方法甚至可以一起使用。