如何传递数据以在 Laravel 中查看?
Posted
技术标签:
【中文标题】如何传递数据以在 Laravel 中查看?【英文标题】:How to pass data to view in Laravel? 【发布时间】:2021-12-29 14:13:36 【问题描述】:我使用return View::make('blog', $posts);
将数据传递到我的刀片视图,在我的刀片视图中我试图运行@foreach ($posts as $post)
我最终得到一个错误,指出$posts
未定义。
我的问题是如何调用$posts
数组?
【问题讨论】:
return View::make('blog',compact('posts'));
要明确,第二个参数需要是关联数组:array('posts' => $posts)
,或者你可以使用with()
方法,如接受的答案所示。
return view('blog',compact('posts'));
【参考方案1】:
您可以使用with
方法将数据传递给视图。
return View::make('blog')->with('posts', $posts);
【讨论】:
如何通过收藏? 如何显示? @MadhuramanGhimire write @foreach($posts as $post) $post->title $post->author 或视图中需要的任何其他数据.【参考方案2】:您还可以将数组作为视图模板名称之后的第二个参数传递,而不是将一堆->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);
(我不经意间就这样做了:如果出现语法错误,请告诉我...)
【讨论】:
请澄清我的概念!!array('posts' => $posts)
我没见过这种数组这是匿名数组???它的名字在哪里??我只知道这个数组有键值对
你可以称它为匿名数组。因此,在这种情况下,当“posts”数组传递给视图时,该键将用作访问数组内部 $posts 的名称。【参考方案3】:
值得一提的是,从 Laravel 5 开始,向视图传递数据现在是这样完成的:
return view("blog", ["posts"=>$posts]);
或者:
return view("blog", compact("posts"));
文档可通过here获取。
【讨论】:
是的,但我仍然使用 with() 将引导闪存错误/成功消息发送到视图。不知道如何使用 compact() 来完成。 @Don'tDownvoteMe 您可以将两者结合使用。return view("blog", compact("posts"))->with("success", "Hooray!");
@miken32 谢谢 Mike,从来不知道我们可以使用 with() 和 compact()。【参考方案4】:
如果你只想传递一个变量来查看,你可以使用
在控制器
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>
【讨论】:
感谢您还展示了如何在刀片模板中使用变量。这就是我缺少的部分。【参考方案5】:你也可以用另一种方式做同样的事情,
如果您使用的是 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
同样的方式你可以访问你在紧凑函数中传递的所有变量。
希望对你有帮助:)
【讨论】:
【参考方案6】:您可以使用 with 方法将数据传递给视图。
return view('greeting', ['name' => 'James']);
【讨论】:
【参考方案7】:use TCG\Voyager\Models\Jobtype;
class FormController extends Controller
public function index()
$category = Jobtype::all();
return view('contact', compact('category'));
使用你的模型
将其分配给变量
将对象传递给视图
这是一个例子:
【讨论】:
【参考方案8】:控制器:
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
希望这会有所帮助! :)
【讨论】:
【参考方案9】:您还可以编写将多个数据从控制器传递到视图
return \View::make('myHome')
->with(compact('project'))
->with(['hello'=>$hello])
->with(['hello2'=>$hello2])
->with(['hello3'=>$hello3]);
【讨论】:
【参考方案10】:提示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:
使用 compact()
return view(about, compact('post1','post2'));
提示3:
使用第二个参数:
return view("about", ["comments"=>$posts]);
【讨论】:
为什么选择最佳实践技巧1?不能直接用type2吗?【参考方案11】:您可以使用以下方式传递数据以在 Laravel 中查看:
public function contact($id)
return view('contact',compact('id'));
【讨论】:
【参考方案12】:例如,您有一个包含数据的数组。
$array1 = $data;
$array2 = $data;
从您的控制器中,您可以使用 compact 传递此变量。您可以传递任意数量的数组。
return view('data.index',compact('array1','array2'));
这里的data是视图中的一个文件夹,index是扩展名为index.blade.php的文件
在视图中你可以这样调用数组
@foreach ($array1 as $something)
// some operation
@endforeach
【讨论】:
【参考方案13】:对于任何人来说,如果您有大量变量要传递给视图,或者您希望变量可以同时被多个视图访问,这真的很乏味,这是另一种方式
在控制器中,您将要传递的变量定义为global
,并将值赋予这些变量。
例如global $variable; $variable = 1;
现在在视图中,在顶部,只需执行
<?php global $variable;?>
然后您现在可以从视图中的任何位置调用您的变量,例如
$variable
希望这对某人有所帮助。
【讨论】:
这是个坏建议。您可以轻松地将数据传递给控制器中的视图,为什么要将其放在全局范围内? @tkc【参考方案14】:你也可以这样做
$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
【讨论】:
【参考方案15】:您可以使用 compact 将表数据传递给查看。
$users = RoleModel::get();
return view('super-admin',compact('users'));
【讨论】:
【参考方案16】:好的,所有答案都告诉您如何将数据传递给视图,但没有人解释如何在视图中读取它。 如果你使用:
//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
。
【讨论】:
以上是关于如何传递数据以在 Laravel 中查看?的主要内容,如果未能解决你的问题,请参考以下文章
我如何传递从另一个模型获取的角色数组以在 laravel 中注册表单
如何在使用安全资产功能时将图像从数据库传递到 laravel 中查看