【发布时间】:2014-10-22 04:11:24
【问题描述】:
我正在尝试在产品编辑页面中列出产品变体的网格视图。我有一个单独的控制器和变体视图。
现在我需要知道如何在产品编辑页面调用变体控制器索引方法,它将返回一个带有分页、搜索、过滤等的视图。
【问题讨论】:
标签: php laravel laravel-4 laravel-routing
我正在尝试在产品编辑页面中列出产品变体的网格视图。我有一个单独的控制器和变体视图。
现在我需要知道如何在产品编辑页面调用变体控制器索引方法,它将返回一个带有分页、搜索、过滤等的视图。
【问题讨论】:
标签: php laravel laravel-4 laravel-routing
这是一件很难简单的事情,因为控制器是 HTTP 请求处理程序。因此,除非您发出另一个请求,否则您不应该在视图中调用控制器方法,而且这样做会很困难,因为它们不应该以这种方式使用。
控制器应该接收请求,调用数据处理器(存储库,类),获取结果数据并将它们发送到视图,获取视图结果并将其发送回浏览器。控制器知道的很少,什么也不做。
视图应该接收数据并绘制它。有很多很多数据没有问题,但它应该接收数据(对象是好的)并绘制它们。
如果您需要使用分页、搜索、过滤等功能绘制视图,则不需要控制器调用来执行此操作,您可以将其添加为子视图:
@include('products.partials.table')
您可以在任何视图中重用该视图的局部。如果这些表格必须仅在某些时候显示,您可以为其添加条件:
@if ($showTable)
@include('products.partials.table')
@endif
如果该部分需要数据,则在控制器中生成该数据:
<?php
class ProductsController extends BaseController {
public function index()
{
$allProducts = $this->productRepository->all();
$filteredProducts = $this->productRepository->filter(Input::all());
$categories = $this->categoriesRepository->all();
return View::make('products.index')
->with('products', compact('allProducts', 'filteredProducts', 'categories'))
}
}
但是,您的控制者对您的业务了解得越少越好,因此您可以这样做:
<?php
class ProductsController extends BaseController {
public function index()
{
$products = $this->dataRepository->getProductsFiltered(Input::only('filter'));
return View::make('products.index')
->with('products', compact('products'))
}
}
并让存储库生成绘制数据所需的必要信息。
【讨论】: