У меня есть форма поиска, чтобы перечислить свойства / объявления по определенным критериям (город, цена, квадратура, тип недвижимости). Я пытаюсь получить красивый URL, как это, например
project/search/city/Madrid/price/10000_50000/quadrature/50_150/propertyType/flat
вместо этого, как сейчас, когда я нажимаю "отправить"
project/search?_token=mCwLL58vOxGHtxEBmntPPcks7nV9n3DHXCNKt7hE&city=Madrid&min_price=10000&max_price=50000&min_quadrature=50&max_quadrature=150&propertyType=flat
Я пытаюсь сделать это с помощью javascript, и если я не ошибаюсь, мне нужно указать путь к атрибуту 'action' формы в виде строки. Любая помощь приветствуется, потому что я довольно новичок в Laravel. Вот мой код
search.blade.php
<form id="searchForm" action="/search" method="GET">
<div class="row">
<div class="col-md-5 mb-3">
<label>City</label>
<input name="city" list="result" id="input" class="form-control">
<datalist id="result"></datalist>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-6">
<label>Price</label>
<input type="number" name="min_price" class="form-control" placeholder="Min Price">
<input type="number" name="max_price" class="form-control" placeholder="Max Price">
</div>
<div class="col-md-6 mb-6">
<label>Quadrature</label>
<input type="number" name="min_quadrature" class="form-control" placeholder="Min quadrature">
<input type="number" name="max_quadrature" class="form-control" placeholder="Max quadrature">
</div>
</div>
<hr class="mb-4">
<div class="row">
<div class="col-md-5 mb-6">
<h5>Property type</h4>
<div class="d-block my-3 ">
<div class="custom-control custom-radio">
<input id="house" name="propertyType" value="house" type="radio" class="custom-control-input">
<label class="custom-control-label" for="house">House</label>
</div>
<div class="custom-control custom-radio">
<input id="flat" name="propertyType" value="flat" type="radio" class="custom-control-input">
<label class="custom-control-label" for="flat">Flat</label>
</div>
</div>
<hr class="mb-4">
<button class="btn btn-primary btn-lg btn-block">Search</button>
</form>
<script>
$( document ).ready(function() {
document.getElementById('searchForm').submit = function (event)
{
event.preventDefault();
var city = document.querySelectorAll('input[name="city"]')[0];
var price = document.querySelectorAll('input[name="price"]')[1];
var quadrature = document.querySelectorAll('input[name="quadrature"]')[2];
var propertyType = document.querySelectorAll('input[name="propertyType"]')[3];
window.location.href = this.action + '/' + encodeURIComponent(city.value) + encodeURIComponent(price.value) + encodeURIComponent(quadrature.value) + encodeURIComponent(propertyType.value);
};
});
</script>
web.php
Route::get('/search', 'CategoryController@index');
Route::get('/search/city/{city}/price/{price}/
quadrature/{quadrature}/propertyType/{propertyType}', 'CategoryController@search');
CategoryController.php
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CategoryController extends Controller
{
public function index()
{
$data = \DB::table('properties');
return view('categories.search', compact('data'));
}
public function search($propertyType, $propertyBidAsk, $propertyPayment, $city, $price, $quadrature, Request $request)
{
$data = \DB::table('properties');
if ($request->city) {
$data = $data->where('city', 'LIKE', "%" . $request->city . "%");
}
if ($request->min_price && $request->max_price ) {
$data = $data->where('price', '>=', $request->min_price)
->where('price', '<=', $request->max_price);
}
if ($request->min_quadrature && $request->max_quadrature ) {
$data = $data->where('quadrature', '>=', $request->min_quadrature)
->where('quadrature', '<=', $request->max_quadrature);
}
$data = $data->paginate(10);
return view('categories.search', compact('data'));
}
}