ahmadelsaeed/laravel-support-ticket

0.0.1 2023-01-02 12:37 UTC

This package is auto-updated.

Last update: 2024-09-09 17:48:14 UTC


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,然后将其与 labelscategories 关联。

您可以将尽可能多的 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 模型还提供了一组方法与相关模型交互

attachCategoriessyncCategories 方法是 attachsync 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)。请参阅许可文件获取更多信息。