ahmadelsaeed / laravel-support-ticket
Laravel 支持工单系统
Requires
- php: ^8.1
- illuminate/contracts: ^9.0
- livewire/livewire: ^2.10
- spatie/laravel-package-tools: ^1.13.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
README
简介
Laravel Ticket 包是一个处理工单系统的后端 API,使用简单。它基于 coderflexx/laravel-ticket
安装
您可以通过 composer 安装此包
composer require ahmadelsaeed/laravel-support-ticket
配置
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="ticket-config"
您可以使用以下命令发布和运行迁移
php artisan vendor:publish --tag="ticket-migrations"
在运行迁移之前,您可能需要发布配置文件,并确保当前表与现有应用程序不冲突,一旦您对迁移表满意,您就可以运行
php artisan migrate
准备你的模型
将 HasTickets
特性添加到您的 User
模型中,并使用 CanUseTickets
接口
... use Coderflex\LaravelTicket\Concerns\HasTickets; use Coderflex\LaravelTicket\Contracts\CanUseTickets; ... class User extends Model implements CanUseTickets { ... use HasTickets; ... }
用法
此包的基本用法是创建一个 ticket
,然后将其与 labels
和 categories
关联。
您可以将尽可能多的 categories
/labels
关联到单个工单。
以下是一个示例
use Coderflex\LaravelTicket\Models\Ticket; use Coderflex\LaravelTicket\Models\Category; use Coderflex\LaravelTicket\Models\Label; ... public function store(Request $request) { /** @var User */ $user = Auth::user(); $ticket = $user->tickets() ->create($request->validated()); $categories = Category::first(); $labels = Label::first(); $ticket->attachCategories($categories); $ticket->attachLabels($labels); // or you can create the categories & the tickets directly by: // $ticket->categories()->create(...); // $ticket->labels()->create(...); return redirect(route('tickets.show', $ticket->uuid)) ->with('success', __('Your Ticket Was created successfully.')); } public function createLabel() { // If you create a label seperated from the ticket and wants to // associate it to a ticket, you may do the following. $label = Label::create(...); $label->tickets()->attach($ticket); // or maybe $label->tickets()->detach($ticket); } public function createCategory() { // If you create a category/categories seperated from the ticket and wants to // associate it to a ticket, you may do the following. $category = Category::create(...); $category->tickets()->attach($ticket); // or maybe $category->tickets()->detach($ticket); } ...
工单表结构
消息表结构
标签表结构
类别表结构
API 方法
工单 API 方法
该 ticket
模型提供了一些方便的方法来使用,以使您的构建过程简单快捷,以下是可用的 API 列表
可链式列显示方法的状态,表明它是否可以链式使用,例如
$ticket->archive() ->close() ->markAsResolved();
工单关系 API 方法
该 ticket
模型还提供了一组方法与相关模型交互
该
attachCategories
和syncCategories
方法是attach
和sync
Laravel 方法的替代方案,如果您想了解更多,请参阅此 链接
该 commentAsUser
方法接受一个用户作为第一个参数,如果为空,则默认使用 认证 用户。
工单作用域
该 ticket
模型还提供了一组作用域以开始过滤。
类别 & 标签作用域
处理文件上传
此包不自带文件上传功能(尚未实现)。相反,您可以使用 laravel-medialibrary(由 Spatie 提供)来处理文件功能。
步骤非常简单,您需要做的只是以下几步。
通过在应用程序中创建一个新的模型文件来扩展 Ticket
模型
php artisan make:model Ticket
然后扩展基础 Ticket Model
,然后使用 spatie 包的 InteractWithMedia
特性和 HasMedia
接口
namespace App\Models\Ticket; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class Ticket extends \Coderflex\LaravelTicket\Models\Ticket implements HasMedia { use InteractsWithMedia; }
其余的实现,请参阅 spatie 包的 文档 以了解更多信息。
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详情。
安全漏洞
请查看我们如何报告安全漏洞的安全策略。
致谢
许可证
MIT许可(MIT)。请参阅许可文件获取更多信息。