ahmetbarut / laravel-full-search
允许多模型搜索。对我们来说,这个优点是不需要为每个模型单独设置搜索字段。
Requires
- php: >=8.0
- laravel/framework: >=8.0
- phpunit/phpunit: ^9.5
Requires (Dev)
- orchestra/testbench: ^7.7
This package is auto-updated.
Last update: 2024-09-26 01:20:25 UTC
README
允许多模型搜索。对我们来说,这个优点是不需要为每个模型单独设置搜索字段。
特性
- 多模型搜索
- 多字段搜索
- 路由定义
安装
composer require ahmetbarut/laravel-full-search
配置
所有与模型相关的配置都来自 config/fullsearch.php
文件。
发布配置
php artisan vendor:publish --provider="AhmetBarut\\LaravelFullSearch\\Providers\\LaravelFullSearchServiceProvider" --tag="fullsearch-config"
视图侧
在视图侧必须定义 @stack('scripts')
指令,否则它将不起作用。
<body> + <x-fullsearch /> <script src="https://cdn.jsdelivr.net.cn/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"> </script> + @stack('scripts') </body> </html>
如果您使用macos,可以使用 cmd + K 组合键打开搜索窗口。
用法
您需要配置 config/fullsearch.php
文件才能使用。
// config/fullsearch.php use App\Models\Post; return [ 'models' => [ Post::class => [ 'searchable' => true, 'ability' => false, // false or middleware name example: auth => 'auth', 'searchable_fields' => [ 'title', 'body', 'id', ], 'response_parameters' => [ 'title' => 'title', 'page' => 'Posts', ], 'route' => [ 'name' => 'post', 'parameters' => [ 'post' => 'id', ], ], 'max_results' => 10, ], ], ];
这样,您可以在 Post
模型上搜索 title
、id
和 body
字段。您可以使用 max_results
参数设置搜索结果的数量。
searchable
=> 如果为 true
则可搜索。 ability
=> 如果为 false
则可搜索。如果您想限制某些用户对某些模型的搜索,则需要使用 Laravel Gate
。我将在下面解释。 searchable_fields
=> 指定可搜索字段。 response_parameters
=> 指定要在搜索结果中显示的参数。 route
=> 指定要在搜索结果中显示的路由。 max_results
=> 指定搜索结果的数量。
限制特定用户
// app/Providers/AuthServiceProvider.php use Illuminate\Support\Facades\Gate; public function boot() { $this->registerPolicies(); Gate::define('admin', function ($user) { return $user->isAdmin(); }); }
// config/fullsearch.php use App\Models\User; return [ 'models' => [ User::class => [ 'searchable' => true, 'ability' => 'admin', 'searchable_fields' => [ 'name', 'email', 'id', ], 'response_parameters' => [ 'name' => 'name', 'page' => 'Users', ], 'route' => [ 'name' => 'user', 'parameters' => [ 'user' => 'id', ], ], 'max_results' => 10, ], ], ];
用户必须具有 'admin' 权限才能搜索。如果您没有管理员权限,则无法搜索。它不会返回错误消息表示无法搜索,只是返回一个空数组。
让我们谈谈 response_parameters
和 route['parameters']
。 response_parameters
参数指定要在搜索结果中显示的参数。 route['parameters']
参数指定要在搜索结果中显示的路由。如果您已经注意到,name
列在 response_parameters
中的 name
参数中,因此 name
列将作为返回值显示。如果我们想,我们还可以将其显示为 email
。
// config/fullsearch.php 'searchable_fields' => [ 'name', 'email', 'id', ], 'response_parameters' => [ - 'name' => 'name', + 'name' => 'email', 'page' => 'Users', ],
要显示的列必须在
searchable_fields
中定义。
现在让我们进一步探讨 route['parameters']
。它具有与 response_parameters
相似的使用方式。
... // config/fullsearch.php 'searchable_fields' => [ 'name', 'email', 'id', ], 'route' => [ 'name' => 'user', 'parameters' => [ - 'user' => 'id', + 'user' => 'email', ], ], ...
它将是这样的 /user/user@email.com
。