77

我将数据传递给我的刀片视图,return View::make('blog', $posts);并且在我的刀片视图中我试图运行一个@foreach ($posts as $post)我最终得到一个错误,说$posts没有定义。

我的问题是如何$posts调用数组?

4

16 回答 16

98

您可以使用该方法将数据传递给视图with

return View::make('blog')->with('posts', $posts);
于 2013-08-20T17:53:36.800 回答
74

值得一提的是,从 Laravel 5 开始,将数据传递给视图现在是这样完成的:

return view("blog", ["posts"=>$posts]);

或者:

return view("blog", compact("posts"));

文档可在此处获得。

于 2016-06-01T04:49:32.927 回答
20

如果您只想传递一个变量来查看,您可以使用

控制器中

return view('blog')->withTitle('Laravel Magic method.');

视图中

<div>
  Post title is {{$title}}.
</div>

如果你想传递多个变量来查看,你可以使用

控制器中

return view('blog')->withTitle('Laravel magic method')->withAuthor('Mister Tandon');

视图中

<div>
   Post title is {{$title}}.Author Name is {{$author}}
</div>
于 2017-01-24T04:46:22.947 回答
10

您还可以将数组作为视图模板名称之后的第二个参数传递,而不是将一堆->with()方法串在一起。

return View::make('blog', array('posts' => $posts));

或者,如果您使用的是 PHP 5.4 或更高版本,您可以使用更好的“短”数组语法:

return View::make('blog', ['posts' => $posts]);

如果您想在其他地方计算数组,这很有用。例如,如果您有一堆变量,每个控制器都需要传递给视图,并且您希望将其与每个特定控制器唯一的变量数组结合起来(array_merge例如,使用 ),您可能会计算$variables(其中包含数组!):

return View::make('blog', $variables);

(我不经意间就这样做了:如果出现语法错误,请告诉我......)

于 2014-05-21T15:45:45.093 回答
8

提示1:

使用 With(),这是一个最佳实践

return view('about')->withName('Author Willson')->withJob('Writer');
return View::make('home')->with(compact('about'))
return View::make('home')->with('comments', $comments);

提示2:

使用紧凑()

return view(about, compact('post1','post2'));

提示3:

使用第二个参数:

return view("about", ["comments"=>$posts]);
于 2018-06-27T06:14:12.280 回答
6
use TCG\Voyager\Models\Jobtype;

class FormController extends Controller
{
public function index()
{
   $category = Jobtype::all();
   return view('contact', compact('category'));

}
}
  • 使用你的模型
  • 将其分配给变量
  • 将对象传递给视图这是一个示例:
于 2017-07-10T06:01:02.987 回答
6

控制器:

use App\your_model_name;
funtion index()
{
$post = your_model_name::all();
return view('index')->with('this_will_be_used_as_variable_in_views',$post);
}

指数:

<h1> posts</h1>
@if(count($this_will_be_used_as_variable_in_views)>0)
@foreach($this_will_be_used_as_variable_in_views as $any_variable)
<ul>
<p> {{$any_variable->enter_table_field}} </p>
 <p> {{$any_variable->created_at}} </p>
</ul>

@endforeach
@else
<p> empty </p>
@endif

希望这可以帮助!:)

于 2017-11-07T10:21:14.217 回答
4

你也可以这样做

$arr_view_data['var1'] = $value1;
$arr_view_data['var2'] = $value2;
$arr_view_data['var3'] = $value3;

return view('your_viewname_here',$arr_view_data);

并且您访问此变量以查看为$var1, $var2,$var3

于 2018-11-06T04:24:39.747 回答
3

您可以使用 compact 将表数据传递给查看。

$users = RoleModel::get();
 return view('super-admin',compact('users'));
于 2020-10-06T11:19:15.910 回答
2

您可以使用 with 方法将数据传递给视图。

return view('greeting', ['name' => 'James']);
于 2017-05-04T07:51:07.283 回答
2

你也可以用另一种方式做同样的事情,

如果您使用的是 PHP 5.5 或最新版本,那么您可以按照以下方式进行操作,

控制器:

return view(index, compact('data1','data2')); //as many as you want to pass

看法:

<div>
    You can access {{$data1}}. [if it is variable]
</div>

@foreach($data1 as $d1)
    <div>
        You can access {{$d1}}. [if it is array]
    </div>
@endforeach

同样的方式,您可以访问您在紧凑函数中传递的所有变量。

希望能帮助到你 :)

于 2017-04-25T04:58:54.987 回答
1

您还可以编写将多个数据从控制器传递到视图

 return \View::make('myHome')
            ->with(compact('project'))
            ->with(['hello'=>$hello])
            ->with(['hello2'=>$hello2])
            ->with(['hello3'=>$hello3]);
于 2018-02-21T06:44:42.357 回答
0

好的,所有答案都告诉您如何将数据传递给视图,但没有人解释如何在视图中读取它。
如果您使用:

 //Routes/web.php
 ...
 Route::get('/user', function () {
    return view('profile', [
       'variable1' => 'value1' ,
       'variable2'=> 'value2' , // add as much as you want
    ]);
 });

要在您的视图中读取这些变量(在此示例中为profile.blade.php文件):

@if($variable1)

 <p> variable1 = {{  $variable1  }}</p>

@endif

Laravel 完成所有必要的工作并$variable1为你创建。

于 2022-02-18T15:13:08.533 回答
-1

For example, you have an array with your data.

$array1  =  $data;
$array2 = $data;

From your controller you can pass this variable using compact. You can pass as many array as you want.

return view('data.index',compact('array1','array2'));

Here data is a folder in view and index is the file with extension index.blade.php

In view you can call the arrays like this

@foreach ($array1 as $something)
   // some operation
@endforeach
于 2018-09-24T21:35:22.877 回答
-1

您可以使用以下方法传递数据以在 Laravel 中查看:

public function contact($id) {
    return view('contact',compact('id'));
}
于 2018-09-24T20:02:02.673 回答
-5

对于任何认为在您有大量变量要传递给视图或者您希望变量可以同时被许多视图访问的情况下真的很乏味的人,这是另一种方式

在控制器中,您定义要传递的变量,global并将值分配给这些变量。

例子global $variable; $variable = 1;

现在在视图中,在顶部,只需执行

<?php global $variable;?>

然后,您现在可以从视图中的任何位置调用您的变量,例如

{{$variable}}

希望这可以帮助某人。

于 2018-10-16T10:24:17.707 回答