shamazingg/laravel-ticket

Laravel Ticket 票务系统,帮助您轻松管理您的票务

dev-main 2022-10-13 15:57 UTC

This package is auto-updated.

Last update: 2024-09-13 19:55:17 UTC


README

Laravisit Logo

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

简介

Laravel Ticket 包是一个后端 API,用于处理您的票务系统,操作简便。这是针对 php 7.4 的适配分支。

安装

您可以通过 composer 安装此包

composer require shamazingg/laravel-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 模型还有一些作用域以开始筛选。

类别 & 标签作用域

处理文件上传

此包(目前)不提供文件上传功能。相反,您可以使用 Spatielaravel-medialibrary 来处理文件功能。

步骤很简单,您需要执行以下操作。

通过在您的应用程序中创建新的模型文件来扩展 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

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

有关如何报告安全漏洞,请参阅 我们的安全策略

致谢

许可协议

MIT许可证(MIT)。请参阅许可证文件获取更多信息。