muharremozdemir Siz filtre seçtiğinizde frontend şöyle bir rota oluşturuyor:
https://www.hepsiburada.com/asus-lenovo-dell-msi-acer/laptop-notebook-dizustu-bilgisayarlar-c-98?puan=4-max&filtreler=fiyat:3000-5000
Bu adrese istek geldiğinde de frontend rotayı parçalayıp şu API isteğini atıyor:
https://blackgate.hepsiburada.com/moriaapi/api/product-and-facet?addressName=&cities=34&filter=markalar:asus,lenovo,dell,msi,acer;fiyat:3000-5000;puan:4-max;categoryId:98&pageType=Category&receiverCity=&receiverDistrict=&receiverTown=&size=24
yani
GET https://blackgate.hepsiburada.com/moriaapi/api/product-and-facet
addressName:
cities: 34
filter: markalar:asus,lenovo,dell,msi,acer;fiyat:3000-5000;puan:4-max;categoryId:98
pageType: Category
receiverCity:
receiverDistrict:
receiverTown:
size: 24
Backendde şu şekilde düşünebilirsiniz:
Route::get('product-and-facet', ProductFacetController::class);
public function __invoke(Request $request)
{
$filterData = $request->only([
'addressName',
'cities',
'pageType',
'receiverCity',
'receiverDistrict',
'receiverTown',
'size'
]);
$filters = explode(';', $request->input('filter', []));
foreach($filters as $filter) {
$part = explode(':', $filter);
if(isset($part[0], $part[1])) {
[$key, $value] = $part;
$filterData['filters'][$key] = match($key) {
'markalar' => explode(',', $value),
'fiyat' => explode('-', $value),
'puan' => explode('-', $value),
'categoryId' => $value,
};
}
}
//...
}
Burada $filterData şöyle oluyor:
[
'addressName' => null,
'cities' => 34,
'pageType' => 'Category',
'receiverCity' => null,
'receiverDistrict' => null,
'receiverTown' => null,
'size' => 24,
'filters' => [
'markalar' => [
'asus',
'lenovo',
'dell',
'msi',
'acer'
],
'fiyat' => [
3000,
5000
],
'puan' => [
4,
'max'
],
'categoryId' => 98,
]
]
Artık bununla sorgu yapabilirsiniz.