ErrorException未定义变量:

时间:2020-09-03 00:39:44

标签: php laravel e-commerce

为什么我会收到此错误? 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');  

3 个答案:

答案 0 :(得分:2)

除了没有将变量正确地传递到刀片视图(其他答案已指出)之外,您还尝试从未设置功能的控制器访问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刀片视图和逻辑移动到可以包裹您要包含的任何其他文件的组件。

文档简单明了,但是如果您希望我向您展示如何实现它以解决您的难题,请在下面的评论中对我提出批评。

答案 1 :(得分:1)

您可以将控制器更改为此:

 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

答案 2 :(得分:1)

您在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获取数据

相关问题