sirs / tasks-multistatus
Requires
- php: ^8.1.0
- cviebrock/eloquent-sluggable: ^10.0
- laravel/framework: ^10.0
- venturecraft/revisionable: ^1.4
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.1
- dev-master
- 10.0.x-dev
- 10.0.0
- 9.x-dev
- 9.0
- 6.0
- 4.0.x-dev
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.0.x-dev
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.4.21
- 2.4.20
- 2.4.19
- 2.4.18
- 2.4.17
- 2.4.16
- 2.4.15
- 2.4.14
- 2.4.13
- 2.4.11
- 2.4.10
- 2.4.9
- 2.4.8
- 2.4.7
- 2.4.6
- 2.4.5
- 2.4.4
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.12
- 2.3.11
- 2.3.10
- 2.3.9
- 2.3.8
- 2.3.7
- 2.3.6
- 2.3.5
- 2.3.4
- 2.3.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.1
- 2.2.0
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.x-dev
- 2.0.12
- 2.0.11
- 2.0.10
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.3.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-laravel-10
- dev-laravel-9
- dev-laravel-6-compatible
- dev-tasks-multistatus-tests
- dev-documenting
This package is auto-updated.
Last update: 2024-09-18 22:26:14 UTC
README
提供迁移、种子、模型、事件、 artisan 命令和作业以支持任务管理。
概述
任务是要由所有者(多态关系)完成或为其完成的待办事项。任务通过其 TaskType(Task 属于 TaskType)进行描述,并通过 TaskStatus(Task 属于 TaskStatus)表示其状态。
从版本 2.2.0 开始,您可以为任务 URL 路由定义一个任务路由器,将用户虚拟路由到任何地方(请参阅下面的 tasks.router 中间件)。从 2.2.0 版本开始,您可以在 config/tasks.php 中应用全局作用域(请参阅下面的 配置)。
版本
| Laravel | Sirs\Tasks | ||
|---|---|---|---|
| 10.0 | 10.0 | ||
| 9.0 | 9.0 | ||
| 6.0 | 6.0 | ||
| 5.7 | 4.0 | ||
| 5.5 - 5.6 | 3.x | 4.0 | |
| 5.1 - 5.4 | 3.x | ||
| 5.0 | 1.3.x |
安装
composer require sirs/tasks-multistatus- 如果您未自动检测服务提供者,请将
Sirs\Tasks\TasksServiceProvider::class,添加到 config/app.php - 通过供应商发布以获取配置文件、迁移、默认种子器和默认 TaskRouter。
- 将您的 TaskTypeStatusSeeder 添加到 DatabaseSeeder.php,并在 database/seeds/type_status_definition.json 中定义您的任务类型和状态(注意,任何在您的 TaskType 或 TaskStatus 模型上可用的属性都可以在这里定义)。
- 任何将成为任务所有者的模型都必须实现
Sirs\Tasks\Interfaces\Taskowner,这可以通过使用Sirs\Tasks\TaskOwnerTraits来实现。 - 为您的 TaskOwner 模型创建 EloquentResources(可选)。
任务管理器
任务管理器可通过 /tasks/manager 访问。所有 HTML、CSS 和 JavaScript 都包含在内,并通过包进行路由。如果您需要自定义任务管理器,应将源文件复制到您的项目中,并按您的喜好使用/更新它。
cp -r vendor/sirs/tasks-multistatus/src/assets/js/components/Tasks resources/assets/js/components
注意:如果您以前使用过 sirs/tasks(即从模板中),您可能希望完全删除所有 sirs/tasks 内容并执行供应商发布以从头开始。
配置
根据您的项目自定义 TaskType 和 TaskStatus 种子器。然后根据需要更新配置。配置选项包括:
- apiPrefix: 任务 API 路由的路径前缀。默认为 'api'
- routeGroup: 任务路由的路由组。默认为
`['middleware' => ['auth','tasks.redirect']]` - owner_transformers: ownerTypeClass=>ownerTypeTransformerClass 的映射,其中转换器类是一个 Fractal Transformer。默认为空数组;
- global_scopes: 应用于 Task 模型的全局作用域数组。默认为空数组
- taskToAction: TaskType->slug => action 的映射。请参阅 config/tasks.php 中的示例
- router: 与 tasks.router 中间件一起使用的任务路由器类名。默认为 published App\TaskRouter::class,
- bindings.models: 使用您自己的模型,该模型符合相关接口设置此选项。示例
... 'bindings' => [ 'models' => [ 'Task' => \App\Task::class, // where \App\Task implements \Sirs\Tasks\Interfaces\Task 'TaskType' => \App\TaskType::class, // where \App\Task implements \Sirs\Tasks\Interfaces\TaskType 'TaskStatus' => \App\TaskStatus::class, // where \App\Task implements \Sirs\Tasks\Interfaces\TaskStatus ] ], ...
tasks.router 中间件
在 App/Http/Kernel.php 中注册 task.redirect 中间件
protected $middlewareAliases = [
...
'tasks.redirect' => \Sirs\Tasks\Middleware\RedirectTasks::class,
]
在 config/tasks.php 中自定义您的 taskActions 映射
'taskToAction'=>[
/** examples:
* 'task-slug' => 'action_type:slugOrIdentifier'
* 'survey-task' => 'survey:surveySlug',
* 'schedule-appt-task' => 'appointment:apptTypeId',
* 'redirect-to-url' => 'url:/path/to/thing'
* 'custom-task' => 'custome:someIdentifier'
**/
],
如果需要自定义任务路由功能,则在 TaskRouter.php 中修改 TaskRouter 类的 resolve 函数
public function resolve(Task $task){
$taskToAction = config('tasks.taskToAction');
if( !isset($taskToAction[$task->taskType->slug]) ) return null;
list($type, $identifier) = preg_split('/:/', $taskToAction[$task->taskType->slug]);
switch ($type) {
case 'survey':
return url('app-participant/'.$task->owner->identifier.'/survey/'.$identifier);
case 'appointment':
$url = 'appointments/create?appointment_type_id='.$identifier.'&attendee_id='.$task->owner->identifier;
switch ($identifier) {
case 2:
// $forTask = $task->owner->tasks->where('task_type_id', 1)->first();
break;
default:
$forTask = null;
break;
}
$url = ( $forTask ) ? $url.'&task_id='.$forTask->identifier : $url;
return url($url);
case 'url':
return url($identifier);
default:
return null;
break;
}
}
此函数应返回用于 Laravel redirect() 辅助函数的 URL 或 null 以进行默认路由。
即使您已将任务类型映射到上面的操作,您也可以通过将 bypassRouter=1 添加到任务 URL 来绕过路由器。例如,我可以通过以下 URL 强制任务 383 使用默认任务表单: /tasks/383?bypassRouter=1
从版本 2.3.9 开始,中间件将传递原始任务 URL 上的查询字符串属性。
示例任务类型:任务123路由到/monkeys: http::project/tasks/123/food=fruit&drink=coffee 将重定向到 http::project/monkeys?food=fruit&drink=coffee
任务事件
任务生命周期事件构建在模型事件之上。
- Sirs\Tasks\Events\TaskStarted
- Sirs\Tasks\Events\TaskCompleted
- Sirs\Tasks\Events\TaskCanceled
- Sirs\Tasks\Events\TaskDataUpdated
- Sirs\Tasks\Events\TaskCreated
- Sirs\Tasks\Events\TaskStatusUpdated (已弃用)
- Sirs\Tasks\Events\TaskWasCreated (已弃用)
- Sirs\Tasks\Events\TaskStatusWasUpdated (已弃用)
TaskTypeWorkflowStrategy
为了帮助统一任务生命周期逻辑,现在可以创建工作流策略类,允许您编写处理sirs/tasks包中所有事件的代码。
TaskTypeWorkflowStrategy 应位于 app/Tasks 中,并通过任务和事件构造,具有对应于每个 TaskEvent 类型的相应方法
- TaskStarted -> TaskTypeWorkflowStrategy::started
- TaskDataUpdated - TaskTypeWorkflowStrategy::taskDataUpdated
可以使用以下命令生成这些文件的存根
php artisan tasks:workflow [task-type-slug|all]
使用 all 代替 task-type-slug 将为所有任务类型生成工作流策略类。
TaskTypeWorkflowStrategies 是可选的,不需要为任务类型创建。
命令
- AutocancelTask - 将任务状态设置为自动取消
- CancelTask - 将任务状态设置为已取消
- CompleteTask - 将任务状态设置为已完成
- FailTask - 将任务状态设置为失败
- MissTask - 将任务状态设置为错过
- StartTask - 设置 date_started 时间戳
- UpdateTaskStatus (已弃用 使用 task->update())
- CreateTask (已弃用 使用 Task::create(...))
- DeleteTask (已弃用 使用 task->delete())
任务所有者
将成为任务所有者的模型必须实现 Sirs\Tasks\Interfaces\Taskowner。这可以通过在模型上使用 Sirs\Tasks\TaskOwnerTraits 特性并给模型提供一个返回所有者全名的 fullName 方法来实现。TaskOwnerTraits 为模型提供与任务的多对多关系。
您可以在配置中可选地定义任务所有者的 Eloquent 资源
...
"owner_resources" => [
User::class => MyUserResource::class
]
...
任务管理界面
版本 2.3 引入了基本的任务管理界面,允许用户查看任务和更新任务状态和截止日期,而无需任务相关表单。
这些界面位于
默认任务表单
自版本 2.3 以来,现在有默认的任务表单。
该表单询问任务是否完成,并允许用户设置状态或如果未完成,则将任务保留为待办。
路由
任务 REST API
任务、类型和状态的 REST API 控制器。
我应该和谁联系?
- TJ Ward - jward3@email.unc.edu