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

Rob*_*ert 0 php laravel

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

Mar*_*ker 7

compact()是一个标准的PHP函数,它从变量列表构建数组,将变量名称指定为数组元素键,将变量值指定为数组元素值.它可以用作将变量传递给Laravel中的视图的便捷方式,因为Laravel View::make()将接受键/值对数组的第二个参数.您可以轻松指定键/值对的数组,但PHP compact()提供了一种简单的方法.

$x = "Hello";
$y = "world";
$view = View::make('myViewName', compact('x', 'y');
Run Code Online (Sandbox Code Playgroud)

是相同的

$x = "Hello";
$y = "world";
$view = View::make('myViewName', ['x' => $x, 'y' => $y]);
Run Code Online (Sandbox Code Playgroud)

但是compact()你的变量必须已经存在.手动指定数组更灵活,因为您可以这样做

$x = "Hello";
$y = "world";
$view = View::make('myViewName', ['salutation' => $x, 'addressTo' => $y]);
Run Code Online (Sandbox Code Playgroud)

这将使变量叫$salutation$addressTo刀片模板中,即使你原来的变量只是叫$x$y.

或者你甚至可以做

$view = View::make('myViewName', ['salutation' => "Hello", 'addressTo' => "world"]);
Run Code Online (Sandbox Code Playgroud)

with()是特定于Laravel的,并且(在此View构建上下文中)允许您指定要传递给视图的各个键和值.主要区别在于您可以将键名称指定为您想要的任何内容(与使用您自己构建的数组作为第二个参数的方式非常相似View::make()),并且值可以是函数调用的直接返回.

$x = "Hello";
$y = "world";
$view = View::make('myViewName')->with('x', $x)->with('y', $y);
Run Code Online (Sandbox Code Playgroud)

要么

$view = View::make('myViewName')->with('x', "Hello")->with('y', "World");
Run Code Online (Sandbox Code Playgroud)

要么

$view = View::make('myViewName')
    ->with('salutation', "Hello")
    ->with('addressTo', "World");
Run Code Online (Sandbox Code Playgroud)

它基本上与传递用户构建的数组相同View::make(),但可以说更具可读性

在这两种情况下,键/值对(无论是通过第二个参数指定View::make()还是使用with())都是在刀片模板中提取的,其中键用于元素名称.

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