如何解决ErrorException未定义变量:
为什么我会收到此错误? ErrorException 未定义的变量:功能(视图:C:\ xampp \ htdocs .... views \ layouts \ index.blade.php)
FeaturedController.php
public function index()
{
$features = Feature::get();
return view ('layouts.index')->with(compact('features'));
}
ProductsController.php
public function index()
{
$products = Product::get();
return view ('products')->with(compact('products'));
}
布局页面-index.blade.php
@yield('content')
@foreach($features as $f)
<li>
<div class="prodcut-price mt-auto">
<div class="font-size-15">LKR {{ $f ['features_id'] }}.00</div>
</div>
</li>
@endforeach
查看页面-index.blade.php
@extends('layouts.index')
@section('content')
@foreach($products as $p)
<div class="mb-2"><a href="../shop/product-categories-7-column-full-width.html" class="font-size-12 atext">{{ $p ['prod_sub_category'] }}</a></div>
<h5 class="mb-1 product-item__title"><a href="../shop/single-product-fullwidth.html" class="text-blue font-weight-bold">{{ $p ['prod_name'] }}</a></h5>
<div class="mb-2">
<a href="../shop/single-product-fullwidth.html" class="d-block text-center"><img class="img-fluid" src="{{asset('/storage/admin/'.$p ['prod_image_path'] ) }}" alt="Image Description"></a>
</div>
<div class="flex-center-between mb-1">
<div class="prodcut-price">
<div class="atext">LKR {{ $p ['prod_price'] }}.00</div>
</div>
<div class="d-none d-xl-block prodcut-add-cart">
<a href="../shop/single-product-fullwidth.html" class="btn-add-cart btn-primary transition-3d-hover"><i class="ec ec-shopping-bag"></i></a>
</div>
web.php
Route::resource('/products','ProductsController');
Route::resource('/layouts/index','FeaturedController@index');
解决方法
除了没有将变量正确地传递到刀片视图(其他答案已指出)之外,您还尝试从未设置功能的控制器访问features
。
下面的控制器先设置功能,然后在layouts.index
刀片文件中使用它。
FeaturedController.php
public function index()
{
$features = Feature::get();
return view ('layouts.index')->with(['features' => $features]);
// or
// return view ('layouts.index',compact('features'));
}
尽管此控制器设置了products
,但随后使用了一个刀片文件,该刀片文件扩展了另一个带有features
变量的刀片文件。这就是为什么您会得到错误
ProductsController.php
public function index()
{
$products = Product::get();
return view ('products',compact('products'));
}
要解决此问题,您必须像这样通过features
边传递products
变量:
ProductsController.php
public function index()
{
$products = Product::get();
$features = Feature::get();
return view ('products')->with(['features' => $features,'products' => $products]);
}
但是,如果要使用多个刀片文件扩展此layouts.index
文件,则不建议采用这种方法,而这种情况就是Taylor Otwell引入Blade Components的原因。现在,您可以将features
刀片视图和逻辑移动到可以包裹您要包含的任何其他文件的组件。
文档简单明了,但是如果您希望我向您展示如何实现它以解决您的难题,请在下面的评论中对我提出批评。
,您可以将控制器更改为此:
public function index()
{
$features = Feature::all();
return view ('layouts.index',compact('features'));
}
您应该实际使用@section作为刀片:
@section('content')
@foreach($features as $f)
<li>
<div class="prodcut-price mt-auto">
<div class="font-size-15">LKR {{ $f->features_id }}.00</div>
</div>
</li>
@endforeach
@endsection
,
您在layout
中使用数据时,应使用laravel视图编辑器将数据共享到布局文件引用链接https://laravel.com/docs/7.x/views#view-composers
在您的AppServiceProvider.php
在boot()
内添加此行
public function boot()
{
\View::composer('layouts.index',function ($view) { // here layout path u need to add
$features = Feature::get();
$view->with([
'features'=>$features,]);
});
}
它基于指定的视图文件共享数据,例如
layouts.index
,数据将发送到此视图,因此,如果您不从控制器发送数据,它将从view composer
获取数据
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。