Код: Выделить всё
Route::prefix('admin')->name('admin.')->group(function () {
Route::get('coupons/search', [CouponController::class, 'search'])->name('coupons.search');
Route::resource('coupons', CouponController::class)->names('coupons');
});
Код: Выделить всё
function couponSearch() {
return {
search: '',
coupons: [],
selectedCoupon: null,
async searchCoupons() {
this.selectedCoupon = null;
if (this.search.length < 2) {
this.coupons = [];
return;
}
try {
console.log('Searching for coupon:', this.search);
const response = await fetch(`/admin/coupons/search?q=${encodeURIComponent(this.search)}`, {
method: 'GET',
headers: {
'Accept': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
}
});
if (!response.ok) {
throw new Error(`Search failed with status: ${response.status}`);
}
this.coupons = await response.json();
console.log('Coupons found:', this.coupons);
} catch (e) {
console.error('Error searching coupons:', e);
this.coupons = [];
}
},
selectCoupon(coupon) {
this.selectedCoupon = coupon;
this.search = coupon.code;
this.coupons = [];
}
};
}
< /code>
Вот метод контроллера, обрабатывающий запрос: < /p>
public function search(Request $request)
{
dd($request->all()); // Debugging request
$query = $request->input('q');
Log::debug('Coupon search request', ['query' => $query]);
if (empty($query)) {
return response()->json([]);
}
$coupons = Coupon::where('is_active', true)
->where(function ($q) use ($query) {
$q->where('code', 'like', "%$query%");
})
->where(function ($q) {
$q->whereNull('valid_until')
->orWhere('valid_until', '>=', now());
})
->where(function ($q) {
$q->whereNull('max_uses')
->orWhereRaw('uses < max_uses');
})
->get(['id', 'code', 'discount_type', 'discount_value']);
Log::debug('Coupon search results', ['count' => $coupons->count()]);
return response()->json($coupons);
}
< /code>
Консоль вывод: < /p>
Searching for coupon: test
GET http://127.0.0.1:8000/admin/coupons/search?q=test 404 (Not Found)
Error searching coupons: Error: Search failed with status: 404
Маршрут поиска определяется перед маршрутом :: Ресурс. /> < /ul>
Код: Выделить всё
GET|HEAD admin/coupons ...... admin.coupons.index › Admin\CouponController@index
POST admin/coupons ...... admin.coupons.store › Admin\CouponController@store
GET|HEAD admin/coupons/create admin.coupons.create › Admin\CouponController@create
GET|HEAD admin/coupons/search admin.coupons.search › Admin\CouponController@search
GET|HEAD admin/coupons/{coupon} admin.coupons.show › Admin\CouponController@show
PUT|PATCH admin/coupons/{coupon} admin.coupons.update › Admin\CouponController@update
DELETE admin/coupons/{coupon} admin.coupons.destroy › Admin\CouponController@destroy
GET|HEAD admin/coupons/{coupon}/edit admin.coupons.edit › Admin\CouponController@edit
Подробнее здесь: https://stackoverflow.com/questions/796 ... pons-searc
Мобильная версия