首页 > 解决方案 > 产品未定义 Laravel

问题描述

当我在控制器中设置 products 变量时出现此错误Undefined variable: $productsTR,我有一个主刀片和一个部分刀片。主刀片是将数据发送到控制器然后返回到部分刀片的刀片。我该如何解决这个问题Undefined variable: $productsTR

家庭控制器

  public function viewProduct($id){
    $productsTR = Product::with('ProductsPhoto')->where('id',$id)->get();
    $returnHTML = view('productdetail')->with('productsTR', $productsTR)->render();
    return response()->json(array('success' => true, 'html'=>$returnHTML));
}

路线

Route::get('view-product/{id}', 'HomeController@viewProduct')->name('view.producT');

部分刀片(productdetail)

@foreach($productsTR as $product)
@foreach($product->ProductsPhoto as $productImage)
           <img src="{{ Storage::url($productImage->filename) }}"  alt="small">
  @endforeach
@endforeach

主刀片

<div class="modal fade" id="view-product" tabindex="-1" role="dialog" aria- 
labelledby="myModalLabel">
<div class="modal-dialog" role="document">
    @include('productdetail')
</div>
</div>


 @foreach($products as $product)
    @if(count($product->ProductsPhoto))
    <a href="javascript:;" id="{{$product->id}}" class="modal-global" >
    <img src="{{Storage::url($product->ProductsPhoto[0]->filename)}}" alt="" >
</a>
        @endif
    @endforeach

Javascript

 <script>
$('.modal-global').click(function(event) {
    event.preventDefault();

    var product_id = $(this).attr("id");
var url = '{{route('view.producT',[":product_id"])}}';
url = url.replace(':product_id', product_id);

    $("#view-product").modal('show');

    $.ajax({
        url: url,
        type: 'GET',
        dataType: 'html',
    })
    .done(function(response) {
        $("#view-product").find('.view-product').html(response);
    });

});
</script>

主刀片(ProductController)

   public function index(Request $request)
  {
    $userId = $request->user()->id;
    $products = product::where('user_id', $userId)->paginate(20);
   return view('product.index',compact('products'));
   }

主刀路线

Route::get('/user/product', 'ProductController@index');

 

标签: javascriptajaxlaravellaravel-5

解决方案


方法一

问题是您没有在 index 函数中传递 $productsTR 。

public function index(Request $request)
{
    $userId = $request->user()->id;
    $products = product::where('user_id', $userId)->paginate(20);
    
    $productsTR = NULL;//Add this line
    return view('product.index',compact('products', 'productsTR')); //update here
}

然后在这里检查

<div class="modal-dialog" role="document">
  @if($productsTR)
    @include('productdetail')
  @else
    //add as per your needs or remove else part
  @endif
</div>

方法二

或者,如果您只想通过脚本进行渲染,请这样做

<div class="modal-dialog" role="document">
   <div class="modal-content">
      <div class="modal-body" id="renderedView">
        
      </div>
   </div>
</div>

$.ajax({
   type:'GET',
   url:url,
   dataType:'JSON,
   success:function(response){
       $("#renderedView").html(response.html);
   }
});

如果您仅通过 ajax 进行渲染,则可以跳过第一种方法


推荐阅读