middleware(SetProductSortOption::class)->only('index'); } /** * Display a listing of the resource. * * @param \Modules\Product\Entities\Product $model * @param \Modules\Product\Filters\ProductFilter $productFilter * @return \Illuminate\Http\Response */ public function index(Product $model, ProductFilter $productFilter) { if (request()->expectsJson()) { return $this->searchProducts($model, $productFilter); } return view('public.products.index'); } /** * Show the specified resource. * * @param string $slug * @return \Illuminate\Http\Response */ public function show($slug) { $product = Product::findBySlug($slug); $relatedProducts = $product->relatedProducts()->forCard()->get(); $upSellProducts = $product->upSellProducts()->forCard()->get(); $review = $this->getReviewData($product); event(new ProductViewed($product)); return view('public.products.show', compact('product', 'relatedProducts', 'upSellProducts', 'review')); } private function getReviewData(Product $product) { if (! setting('reviews_enabled')) { return; } return Review::countAndAvgRating($product); } }