首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Laravel控制器中对产品数据进行排序后重新加载View?

如何在Laravel控制器中对产品数据进行排序后重新加载View?
EN

Stack Overflow用户
提问于 2019-08-07 14:22:34
回答 1查看 1.4K关注 0票数 0

在我正在工作的网站上,我在绘制视图时遇到了一些问题。在网站产品-列表页面上,有一个小的“排序.”元素。当用户选择其中一个选项时,它应该用已排序的产品重新加载产品页面,或者在不同的URL上用排序的产品加载相同的视图。任何一种都可以,我只想把订购的产品展示出来。在我的ProductsController中对产品进行排序是很好的,但是当我想将这些排序的产品传递到前端时,我仍然会遇到问题。我在下面的代码中返回的视图与产品列表页面的正常视图相同。fyi:我对Laravel比较陌生,以前主要和JavaScript一起工作,所以我可能会尝试用一种非常愚蠢的、非Laravel的方式来做这件事。

理想情况下,我只想将排序的产品传递给产品列表页面的Blade文件。我试过了,但我不知道怎么触发重装。然后,我尝试将用户引导到一个新的路由(我在web.php中注册了该路由),在那里,我计划呈现相同的Products视图,但使用排序的数据。这也不起作用,给了我一个带有模糊jQuery错误消息的空白页面。

在ProductsController.php中:

代码语言:javascript
复制
public function sortController($type) {

        $available_products = Products::with(['gallery', 'slug'])->get()
        ->where('status', 'available');

        $number_of_products = count($available_products);

        $product_names_sorted_by_type 
            = $this->orderProductTitlesBasedOnNumber($number_of_products, $available_products, $type);

        $sorted_products_array = $this->orderProductsBasedOnSortedArray($number_of_products, $available_products, $product_names_sorted_by_type);

        $product_brands_controller = new ProductsBrandsController;
        $brands_list = $product_brands_controller->getBrandNamesArray();

        return view('aanbod')->with([
            'title' => 'Ons aanbod',
            'products' => $sorted_products_array,
            'brands' => $brands_list
        ]);
    }

在我的App.js:

代码语言:javascript
复制
function handleSortRequest(sortRequest) {

    sortURL = window.location.origin + '/autos/list/sort?q=' + sortRequest

    location.href = sortURL  

}

在我的Web.php:

代码语言:javascript
复制
Route::group(['prefix' => config('site.products.url'), 'as' => 'products.'], function () {
// some other routes...
Route::get('/list/sort/{sort_request}', 'ProductsController@handleSortRequest')->name('sort');
});

无论如何,这是不起作用的,没有任何渲染。我只得到一个带有以下错误的空白页面:"TypeError: a是未定义的- javascript:2771“这个错误似乎发生在PHPDebugbar使用的jQuery文件中。

希望这不是太多短信。谢谢您,让我知道如何改进我的Laravel代码!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-07 15:40:59

相反,我建议您让排序选择在表单中,在选择排序方法时,发送请求(通过js或单击submit按钮)。然后根据选择值处理控制器中的排序逻辑,用排序集合返回视图。

路线:

代码语言:javascript
复制
Route::post('/product/list', [
    'uses' => 'ProductController@action',
    'as' => 'product.action'
]);

ProductController action:

代码语言:javascript
复制
public function action(Request $request)
{
    if (isset($request['sort'])) {
        // do the sorting logic
    }
    ...

    // return view with your sorted products
    return view('product.list', ['products' => $sortedProducts]);
}

这只是一个更拉拉维尔方式的例子。

如果您正在执行AJAX请求:

ProductController action

代码语言:javascript
复制
...
$view = view('product.list', ['products'=> $sortedProducts])->render();

if ($view) {
    return response()->json($view, 200);
} else {
    return response()->json(null, 400);
}
...

app.js

代码语言:javascript
复制
// inside ajax request
success: function(data) {
    $('#some-container').html(data);
},
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57396608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档