我在辩论是否应该使用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
));
}
当然,我现在正在重复我的数据库查询,我不想在每个使用多个视图的控制器方法中重复相同的查询。
这样做的最佳方式是什么?
注意:出于这个问题的目的,我已经简化了数据库调用。代码中可能存在一个或两个拼写错误/语法错误,但对此问题并不重要。
迭代2:
我发现我可以使用view composers
创建视图模型/演示者。
shop.blade.php
@extends('master')
@section('content')
@include('partials.products')
@stop
@section('side1')
@include('partials.cartitems')
@stop
现在将数据传递给部分视图: 首先,我抛弃了PartialController.php,然后修改filters.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文件中...是否有正确/官方的方式来执行此操作?有什么例子吗?
答案 0 :(得分:4)
在app /目录中创建composers.php文件,并通过app / start / global.php将其包含在内。在这个文件中,执行View :: composer调用(你不需要将它们放在App ::之前)。
将composer类移动到新的app / composers /目录中,并将该目录添加到composer.json中的自动加载器中。
除此之外,你对作曲家的使用是正确的。
答案 1 :(得分:0)
并在构造函数()中 写View :: composer
你可以使用DB :: table('产品') - >记住(100) - > get(); vs all()为缓存
答案 2 :(得分:-1)
你可以简单地做
@include('partials.products', array('data'=>'here'))