定制 dvictor357/laravel-omnisearch 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

dvictor357/laravel-omnisearch

最新稳定版本:2.0.0

Composer 安装命令:

composer require dvictor357/laravel-omnisearch

包简介

A global command palette (Cmd+K) for Laravel applications. Search models, navigate routes, and execute commands from anywhere.

README 文档

README

A global command palette (Cmd+K / Ctrl+K) for Laravel 11/12 applications. Search models, navigate routes, execute commands, and more from anywhere in your app.

Latest Version on Packagist Total Downloads License

OmniSearch Screenshot

Features

Core Features

  • 🔍 Global Search – Search across models, routes, and custom sources
  • ⌨️ Keyboard-First – Full keyboard navigation (, , Enter, Esc, Tab)
  • 🎨 Premium UI – Glassmorphism design with smooth animations
  • 🔌 Extensible – Easy to add custom search sources
  • Livewire 3 – Real-time search powered by Livewire
  • 📊 Relevance Scoring – Results ranked by relevance, not just source order

UX Enhancements

  • 📝 Recent Searches – Stores and displays your search history
  • 📋 Copy to Clipboard – Dedicated copy action type with toast notifications
  • 🎯 Multiple Action Types – Navigate, copy, or open modals
  • 🖼️ Dynamic Icons – Built-in icon system with 15+ icons
  • 🎭 Theming – CSS variables for easy customization
  • Accessible – Full ARIA support and screen reader compatible

Developer Experience

  • 🔧 Artisan Commandsomnisearch:install, omnisearch:make-source
  • 📡 Events – Hook into search lifecycle with events
  • 🌍 i18n Ready – Translations support out of the box
  • 🧪 Well Tested – Comprehensive test coverage

Requirements

  • PHP 8.2+
  • Laravel 11.x or 12.x
  • Livewire 3.x

Installation

composer require dvictor357/laravel-omnisearch

Quick Setup

Run the installer command:

php artisan omnisearch:install

Or publish assets manually:

php artisan vendor:publish --tag=omnisearch-config
php artisan vendor:publish --tag=omnisearch-views

Add the component to your main layout (before </body>):

<livewire:omnisearch />

Configuration

Keyboard Shortcuts

'shortcuts' => ['k', '/'],      // Multiple shortcuts supported
'modifier' => 'cmd',             // 'cmd', 'ctrl', or 'alt'

Searchable Models

Configure which models should be searchable in config/omnisearch.php:

'models' => [
    App\Models\User::class => [
        'columns' => ['name', 'email'],    // Columns to search
        'title' => 'name',                 // Display title
        'description' => 'email',          // Display subtitle
        'route' => 'users.show',           // Named route (receives model ID)
        'icon' => 'user',                   // Icon identifier
        'limit' => 5,                      // Max results for this model
        'group' => 'Users',                // Custom group label (optional)
    ],
],

Route Filtering

Control which routes appear in search:

'routes' => [
    'include' => ['*'],
    'exclude' => ['api.*', 'sanctum.*', 'livewire.*'],
],

UI Customization

'ui' => [
    'placeholder' => 'Search anything...',
    'debounce' => 300,
    'max_results' => 10,
    'show_keyboard_hints' => true,
    'max_recent_searches' => 10,
    'enable_history' => true,
    'theme' => [
        'primary' => '#8b5cf6',
        'bg' => 'rgba(30, 30, 46, 0.85)',
        'radius' => '16px',
        'accent' => 'rgba(139, 92, 246, 0.3)',
    ],
],

Search Settings

'search' => [
    'use_scoring' => true,          // Enable relevance scoring
    'min_score' => 0,
    'highlight_matches' => true,
],

Creating Custom Sources

Basic Source

Implement the SearchSource interface:

use OmniSearch\Contracts\SearchSource;
use OmniSearch\Data\Result;
use Illuminate\Support\Collection;

class MyCustomSource implements SearchSource
{
    public function getKey(): string
    {
        return 'custom';
    }

    public function getLabel(): string
    {
        return 'My Results';
    }

    public function getIcon(): string
    {
        return 'star';
    }

    public function authorize(): bool
    {
        return auth()->check();
    }

    public function getSynonyms(): array
    {
        return ['my-result', 'custom-result'];
    }

    public function getDependencies(): array
    {
        return [];
    }

    public function search(string $query): Collection
    {
        return collect([
            Result::navigate(
                id: 'custom:1',
                title: 'Custom Item',
                description: 'A custom search result',
                url: '/custom/1',
                icon: 'star',
                group: $this->getLabel(),
            ),
        ]);
    }
}

Command Source with Dependencies

Use the CommandSource base class for commands with dependencies:

use OmniSearch\Sources\CommandSource;
use OmniSearch\Data\Result;
use Illuminate\Support\Collection;

class CreateUserCommand extends CommandSource
{
    public function getKey(): string
    {
        return 'create-user';
    }

    public function getLabel(): string
    {
        return 'Create User';
    }

    public function getIcon(): string
    {
        return 'user-plus';
    }

    public function getDependencies(): array
    {
        return [
            'team' => App\Search\TeamSearchDependency::class,
        ];
    }

    public function search(string $query): Collection
    {
        return collect([
            Result::modal(
                id: 'command:create-user',
                title: 'Create New User',
                description: 'Open user creation form',
                modalName: 'create-user-modal',
                icon: 'user-plus',
                group: 'Commands',
            ),
        ]);
    }

    public function execute(...$args): mixed
    {
        // Command execution logic
    }
}

Copy Action Result

Create results that copy text to clipboard:

Result::copy(
    id: 'copy:email',
    title: 'Copy Email',
    description: 'Click to copy user email',
    textToCopy: $user->email,
    icon: 'copy',
    group: 'Actions',
);

Register in config/omnisearch.php:

'sources' => [
    OmniSearch\Sources\ModelSource::class,
    OmniSearch\Sources\RouteSource::class,
    App\Search\MyCustomSource::class, // Add your source
],

Events

OmniSearch fires events you can listen to:

use OmniSearch\Events\SearchPerformed;
use OmniSearch\Events\ResultSelected;
use OmniSearch\Events\ModalOpened;

// Listen for search events
Event::listen(SearchPerformed::class, function ($event) {
    // $event->query, $event->resultsCount, $event->duration
});

// Listen for result selection
Event::listen(ResultSelected::class, function ($event) {
    // $event->id, $event->title, $event->actionType, $event->url
});

// Listen for modal open
Event::listen(ModalOpened::class, function ($event) {
    // $event->trigger
});

Artisan Commands

# Install OmniSearch assets
php artisan omnisearch:install

# Create a new search source
php artisan omnisearch:make-source MyCustom

# Clear search cache
php artisan omnisearch:clear-cache

Available Icons

Icon Name Description
🔍 search Search icon
👤 user User/profile
🔗 link Links/routes
📋 copy Copy action
check Success/check
📄 file File/document
🗃️ database Database/models
⚙️ settings Settings
sparkles AI/featured
📐 expand Modal/action
🕐 clock History/time

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

License

Laravel OmniSearch is open-sourced software licensed under the MIT license.

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 4
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-12-31

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固