0

我正处于尝试理解 Laravel 的初始阶段,并且无法显示从控制器传递给刀片的“照明集合对象”。

我的 print_r 正在输出“Illuminate\Support\Collection Object ([items:protected] => Array ()) 1”,我认为这意味着它正在查看数组中的一项(目前只有表中的一条记录),但我'正在点击@else 语句,所以我猜它实际上是空的。我没有收到任何错误,但尽管 $title 输出正常,但我无法显示 $products 中的任何内容。

public function shop(){
        $products = DB::table('products')->get();
        $data = array(
            'title'=>'Shop',
            'products' => $products
        );
        return view('pages.shop')->with($data);
    }
@section('content')
    <h1>{{$title}}</h1>
    {{ print_r($products) }}
    @if($products->count())
        <ul class="list-group">
            @foreach($products as $product)
                <li class="list-group-item">{{$product->title}}</li>
            @endforeach
        </ul>
    @else
        <p>No products</p>
    @endif
@endsection

为什么我的数组是空的?

4

5 回答 5

1

在您的控制器上:

$title = 'Shop';
$products = DB::table('products')->get();

return view('pages.shop', compact('title', 'products');

在你的刀片上:

我还建议将您的无序列表标签<ul>放在循环之外,然后使用@forelse更简洁的代码,如下所示:

@section('content')
  <h1>{{$title}}</h1>
  <ul class="list-group">
    @forelse($products as $product)
       <li class="list-group-item">{{$product->title}}</li>        
    @empty
       <li class="list-group-item">No products</li>  
    @endforelse
  </ul>
@endsection
于 2019-05-24T06:00:52.377 回答
1

试试这个..........

public function shop()
    {
        $products   = DB::table('products')->get();
        $title      = "Shop";
        return view('pages.shop', compact('products', 'title'));
    }

@section('content')
    <h1>{{ isset($title) ? $title : '-' }}</h1>
    @if($products->count())
        <ul class="list-group">
            @foreach($products as $product)
                <li class="list-group-item">{{ isset($product->title) ? $product->title : '-' }}</li>
            @endforeach
        </ul>
    @else
        <p>No products</p>
    @endif
@endsection
于 2019-05-24T07:10:03.973 回答
0

您可以通过首先将数据作为数组传递给视图来显示数据

return view('pages.shop')->with('data', $data);

然后在刀片中

@section('content')
    <h1>{{$data['title']}}</h1>
    @if(count($data['products']))
        <ul class="list-group">
            @foreach($data['products'] as $product)
                <li class="list-group-item">{{$product->title}}</li>
            @endforeach
        </ul>
    @else
        <p>No products</p>
    @endif
@endsection
于 2019-05-23T21:19:05.800 回答
0

将 $products 和 $title 都传递给视图,我更喜欢使用紧凑的感觉更干净。

$title = 'shop';
$products = DB::table('products')->get();


return view('pages.shop', compact('title', 'products');

然后在您看来,您可以直接引用它们。正如你现在所做的那样。

@section('content')
    <h1>{{$title}}</h1>

    @if($products->count())
        <ul class="list-group">
            @foreach($products as $product)
                <li class="list-group-item">{{$product->title}}</li>
            @endforeach
        </ul>
    @else
        <p>No products</p>
    @endif
@endsection
于 2019-05-24T00:12:24.160 回答
0

在您的控制器中

$title = 'shop';
$products = DB::table('products')->get();
return view('pages.shop', compact('title', 'products');
OR
$products = DB::table('products')->get();
$data = array(
        'title'=>'Shop',
        'products' => $products
);
return view('pages.shop')->with('data',$data);

在你的刀片中

@section('content')
<h1>{{$title}}</h1>
@if(count($products))
    <ul class="list-group">
        @foreach($products as $product)
            <li class="list-group-item">{{$product->title}}</li>
        @endforeach
    </ul>
@else
    <p>No products</p>
@endif
@endsection
于 2019-05-24T05:53:55.413 回答