簡體   English   中英

如何從控制器輸出表數據到視圖?

[英]How to output table data from controller to view?

我處於嘗試理解Laravel的開始階段,無法顯示從控制器傳遞到刀片的“照明收集對象”。

我的print_r輸出“ Illuminate \\ Support \\ Collection對象([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

為什么我的數組為空?

在您的控制器上

$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

嘗試這個..........

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

您可以通過首先將數據作為數組傳遞給視圖來顯示數據

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

將$ 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

在您的控制器中

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM