Laravel を使用してオンライン ストアを構築するかどうかを検討しています。
要件 - サイドバーにショッピング カートを表示し、メイン エリアに商品リストを表示します。データを部分ビューにバインドする必要があります。
PartialController
部分ビューを表示する を作成しました。
class PartialController extends BaseController {
public function showCartSummary()
{
$cartItems = Cart::all();
return View::make('partials.cartsummary', array(
'cart' => $cartItems,
));
}
public function showProducts()
{
$products = Products::all();
return View::make('partials.products', array(
'products' => $products,
));
}
}
部分ビューを取得するためのショップ インデックス ビューを作成しました
Shop.Index.Blade.php
@extends('master')
@section('content')
@include('partials.cart')
@stop
@section('side1')
@include('partials.products')
@stop
問題は、partials.cart と partials.products が独自のコントローラーから呼び出されていないため、これらのビューにデータが渡されないことです。
私の回避策は、内でデータベースにクエリを実行し、これをビューShopController
に渡すことです。shop.index
ShopController.php
ShopControllerも作成しました
public function showIndex()
{
$cartItems = Cart::all();
$products = Product::all();
return View::make('shop.index', array(
'cartItems' => $cartItems,
'products' => $products
));
}
もちろん、私は現在、db クエリを繰り返していますが、複数のビューが使用されているすべてのコントローラー メソッドで同じクエリを繰り返す必要はありません。
これを行う最善の方法は何ですか?
注意:この質問のためにデータベース呼び出しを単純化しすぎました。コードに1つまたは2つのタイプミス/構文エラーがある可能性がありますが、この質問にとっては重要ではありません.
反復 2:
view composers
ビューモデル/プレゼンターの作成に使用できることがわかりました。
shop.blade.php
@extends('master')
@section('content')
@include('partials.products')
@stop
@section('side1')
@include('partials.cartitems')
@stop
次に、データを部分ビューに渡します。まず、PartialController.php を破棄し、filters.php を修正します 。
App::before(function($request)
{
View::composer('partials.products', 'ProductComposer');
View::composer('partials.cartitems', 'CartComposer');
});
class ProductComposer {
public function compose($view)
{
$view->with('products', Product::all());
}
}
class CartComposer {
public function compose($view)
{
$view->with('cartitems', Cart::all());
}
}
これはまだ非常に面倒です。すべての部分ビューをfilters.phpファイルに詰め込みたくありません...これを行う適切な/公式の方法はありますか? 例はありますか?