4

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ファイルに詰め込みたくありません...これを行う適切な/公式の方法はありますか? 例はありますか?

4

3 に答える 3

4

app/ ディレクトリに composers.php ファイルを作成し、app/start/global.php 経由でインクルードします。このファイルで、View::composer 呼び出しを実行します (App::before 内に配置する必要はありません)。

composer クラスを新しい app/composers/ ディレクトリに移動し、そのディレクトリを composer.json のオートローダーに追加します。

それ以外は、作曲家の使用は正しいです。

于 2013-09-01T09:13:24.697 に答える
0

私にとっては、抽象クラスを作成します ShopController extends BaseController

そしてconstructor()にView::composerを書きます

DB::table('products')->remember(100)->get(); を使用できます。vs キャッシュの all()

于 2013-09-02T21:32:57.880 に答える
-1

あなたは簡単に行うことができます

@include('partials.products', array('data'=>'here'))
于 2014-02-12T14:02:55.690 に答える