gpt4 book ai didi

php - 如何实现 Laravel 4 分部 View - 将数据绑定(bind)到分部 View

转载 作者:可可西里 更新时间:2023-10-31 23:21:32 25 4
gpt4 key购买 nike

我正在考虑是否应该使用 Laravel 来建立一个在线商店。

要求 - 在侧边栏显示购物车,在主区域显示产品列表。我需要将数据绑定(bind)到我的局部 View 。

我创建了一个 PartialController 来显示部分 View 。

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,
));
}
}

我创建了一个商店索引 View 来拉取部分 View

Shop.Index.Blade.php

@extends('master')

@section('content')
@include('partials.cart')
@stop

@section('side1')
@include('partials.products')
@stop

问题是没有数据传递到这些 View ,因为 partials.cart 和 partials.products 不是从它们自己的 Controller 调用的。

我的解决方法是在 ShopController 中查询数据库并将其传递给 shop.index View 。

ShopController.php

我还创建了一个 ShopController

    public function showIndex()
{
$cartItems = Cart::all();
$products = Product::all();

return View::make('shop.index', array(
'cartItems' => $cartItems,
'products' => $products
));
}

当然,我现在正在重复我的数据库查询,我不想在使用多个 View 的每个 Controller 方法中重复相同的查询。

这样做的最佳方法是什么?

注意:为了这个问题的目的,我已经过度简化了数据库调用&代码中可能会有一两个拼写错误/语法错误,但对这个问题来说并不重要。

迭代 2:

我发现我可以使用 view composers 来创建 viewmodels/presenters。

商店.blade.php

@extends('master')
@section('content')
@include('partials.products')
@stop
@section('side1')
@include('partials.cartitems')
@stop

现在将数据传递给分部 View :首先我放弃 PartialController.php,然后修改 filters.phpfilters.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());
}
}

这仍然很乱,我不想将我所有的局部 View 都塞进 filters.php 文件中......有没有合适的/官方的方法来做到这一点?有例子吗?

最佳答案

在您的 app/目录中创建一个 composers.php 文件,并通过 app/start/global.php 包含它。在这个文件中,执行 View::composer 调用(您不需要将它们放在 App::before 中)。

将 Composer 类移动到新的 app/composers/目录中,并将该目录添加到 composer.json 中的自动加载器。

除此之外,您对 Composer 的使用是正确的。

关于php - 如何实现 Laravel 4 分部 View - 将数据绑定(bind)到分部 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18546910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com