在我正在工作的网站上,我在绘制视图时遇到了一些问题。在网站产品-列表页面上,有一个小的“排序.”元素。当用户选择其中一个选项时,它应该用已排序的产品重新加载产品页面,或者在不同的URL上用排序的产品加载相同的视图。任何一种都可以,我只想把订购的产品展示出来。在我的ProductsController中对产品进行排序是很好的,但是当我想将这些排序的产品传递到前端时,我仍然会遇到问题。我在下面的代码中返回的视图与产品列表页面的正常视图相同。fyi:我对Laravel比较陌生,以前主要和JavaScript一起工作,所以我可能会尝试用一种非常愚蠢的、非Laravel的方式来做这件事。
理想情况下,我只想将排序的产品传递给产品列表页面的Blade文件。我试过了,但我不知道怎么触发重装。然后,我尝试将用户引导到一个新的路由(我在web.php中注册了该路由),在那里,我计划呈现相同的Products视图,但使用排序的数据。这也不起作用,给了我一个带有模糊jQuery错误消息的空白页面。
在ProductsController.php中:
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:
function handleSortRequest(sortRequest) {
sortURL = window.location.origin + '/autos/list/sort?q=' + sortRequest
location.href = sortURL
}在我的Web.php:
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代码!
发布于 2019-08-07 15:40:59
相反,我建议您让排序选择在表单中,在选择排序方法时,发送请求(通过js或单击submit按钮)。然后根据选择值处理控制器中的排序逻辑,用排序集合返回视图。
路线:
Route::post('/product/list', [
'uses' => 'ProductController@action',
'as' => 'product.action'
]);ProductController action:
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
...
$view = view('product.list', ['products'=> $sortedProducts])->render();
if ($view) {
return response()->json($view, 200);
} else {
return response()->json(null, 400);
}
...app.js
// inside ajax request
success: function(data) {
$('#some-container').html(data);
},https://stackoverflow.com/questions/57396608
复制相似问题