【问题标题】:how to call resource controller index in a view laravel 4如何在视图 laravel 4 中调用资源控制器索引
【发布时间】:2014-10-22 04:11:24
【问题描述】:

我正在尝试在产品编辑页面中列出产品变体的网格视图。我有一个单独的控制器和变体视图。

现在我需要知道如何在产品编辑页面调用变体控制器索引方法,它将返回一个带有分页、搜索、过滤等的视图。

【问题讨论】:

    标签: php laravel laravel-4 laravel-routing


    【解决方案1】:

    这是一件很难简单的事情,因为控制器是 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'))
        }
    
    }
    

    并让存储库生成绘制数据所需的必要信息。

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 2020-08-24
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2013-07-30
      • 2014-10-30
      • 2013-08-20
      相关资源
      最近更新 更多