علاقه مند به تکنولوژی های جدید ، زبان های جدید برنامه نویسی و Backend Developer
ایجاد جستجو زنده (ایجکس) با Vue و لاراول
به شخصه خیلی دنبال همچین جستجویی گشتم و تو رفرنس های فارسی چیز به درد بخوری پیدا نکردم تا این که به پکیج spatie/laravel-searchable رسیدم کار باهاش خیلی اسونه و فقط کافیه مدلی که میخوایم جستجو بشه تریتشو یوز کنیم
بریم سر اصل مطلب ابتدا پکیج spatie/laravel-searchable را با دستور زیر نصب کنید:
composer require spatie/laravel-searchable
بعد از نصب داخل مدل مورد نظرتون برید :
<?php
namespace App;
use Spatie\Searchable\Searchable;
use Spatie\Searchable\SearchResult;
use Illuminate\Database\Eloquent\Model;
class Product extends Model implements Searchable
{
public function getSearchResult(): SearchResult
{ $url = $this->path();
return new SearchResult($this, $this->title, $url);
}
public function path(){
return $this->slug;
}
}
خب همانطور که میبینید ما از implements Searchable استفاده کردیم و یک متد هم به صورت اتوماتیک برای ما اضافه میشه .
حالا نیاز به یک rote داریم که اطلاعات باهاش به کنترلر بفرستیم
Route::get('product/search', 'SearchController@index');
بعد از ایجاد مسیر ، کنترلر مربوطه هم با دستور زیر میسازیم:
php artisan make:controller SearchController
بعد از ایجاد کنترلر کد های زیر را در ان قرار میدهیم
<?php
namespace App\Http\Controllers;
use App\Product;
use Spatie\Searchable\Search;
use Illuminate\Http\Request;
class SearchController extends Controller{
public function index(Request $request)
{
$results = (new Search())
//قسمت هایی که میخوایم جستجو بشن
->registerModel(Product::class, ['title', 'body'])
->search($request->input('query'));
return response()->json($results);
}
}
خب تا اینجای کار قسمت بکند ما اماده شده و نیاز به ایجاد قسمت فراند داریم که با vue این قسمت میسازیم:
<template>
<div>
<input type="text" placeholder="Search" v-model="query">
<ul v-if="results.length > 0 && query">
<li v-for="result in results.slice(0,10)" :key="result.id">
<a :href="result.url">
<div v-text="result.title"></div>
</a>
</li>
</ul>
</div>
</template>
export default {
data() {
return {
query: "",
results: []
};
},
watch: {
query(after, before) {
this.searchMembers();
}
},
methods: {
searchMembers() {
axios.get('products/search', { params: { query: this.query } })
.then(response => this.results = response.data)
.catch(error => {});
}
}
}
این هم از قسمت ویو جستجو . حالا میتونید این کامپوننت رو هر جای سایتتون که میخواید فراخوانی کنید
مطلبی دیگر از این انتشارات
روابط Has Many Through در لاراول
مطلبی دیگر از این انتشارات
ویژگیهای جدید Laravel 11 بخش اول
مطلبی دیگر از این انتشارات
ساخت پنل ادمین با لاراول به سریع ترین روش ممکن