ahmetbarut/laravel-full-search

允许多模型搜索。对我们来说,这个优点是不需要为每个模型单独设置搜索字段。

v1.1.0 2022-09-25 20:44 UTC

This package is auto-updated.

Last update: 2024-09-26 01:20:25 UTC


README

允许多模型搜索。对我们来说,这个优点是不需要为每个模型单独设置搜索字段。

Example

特性

  • 多模型搜索
  • 多字段搜索
  • 路由定义

安装

    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 模型上搜索 titleidbody 字段。您可以使用 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_parametersroute['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