matt-daneshvar/laravel-survey

在您的 Laravel 应用中创建调查

v0.4.0 2024-03-14 22:57 UTC

This package is auto-updated.

Last update: 2024-08-28 00:52:49 UTC


README

Tests GitHub

在您的 Laravel 应用中创建和管理调查。

Demo

此视频 演示了安装此软件包并创建一个基本调查的过程。

安装

使用 composer 安装此软件包。

composer require matt-daneshvar/laravel-survey

发布软件包迁移。

php artisan vendor:publish --provider="MattDaneshvar\Survey\SurveyServiceProvider" --tag="migrations" 

运行迁移以创建所有必需的表。

php artisan migrate 

使用方法

创建调查

创建一个新的 Survey 很简单!您可以使用流畅的方式构建调查,就像在您的应用中创建所有 Eloquent 模型一样。

$survey = Survey::create(['name' => 'Cat Population Survey']);

$survey->questions()->create([
     'content' => 'How many cats do you have?',
     'type' => 'number',
     'rules' => ['numeric', 'min:0']
 ]);

$survey->questions()->create([
    'content' => 'What\'s the name of your first cat',
]);

$survey->questions()->create([
    'content' => 'Would you want a new cat?',
    'type' => 'radio',
    'options' => ['Yes', 'Oui']
]);

查看 可用的问题类型列表

创建多个部分

您也可以将问题放在多个部分下。

$survey = Survey::create(['name' => 'Cat Population Survey']);

$one = $survey->sections()->create(['name' => 'Part One']);

$one->questions()->create([
    'content' => 'How many cats do you have?',
    'type' => 'number',
    'rules' => ['numeric', 'min:0']
]);

$two = $survey->sections()->create(['name' => 'Part Two']);

$two->questions()->create([
    'content' => 'What\'s the name of your first cat?',
]);

$two->questions()->create([
    'content' => 'Would you want a new cat?',
    'type' => 'radio',
    'options' => ['Yes', 'Oui']
]);

创建条目

从数组中

Entry 模型提供了一个 fromArray 函数。
这对于从表单提交中创建条目特别有用。

(new Entry)->for($survey)->fromArray([
    'q1' => 'Yes',
    'q2' => 5
])->push();

通过特定用户

您可以使用 by() 函数流畅地指定参与者。

(new Entry)->for($survey)->by($user)->fromArray($answers)->push();

设置约束

在创建调查时,您可以设置一些约束,以确保每次创建新的 Entry 时都强制执行。

允许访客条目

默认情况下,Entry 模型在创建时需要 participant_id。如果您希望更改此行为并接受访客条目,请在 Survey 模型上设置 accept-guest-entries 选项。

Survey::create(['settings' => ['accept-guest-entries' => true]]);

调整每个参与者的条目限制

所有 Survey 模型默认只接受每个唯一参与者 1 个条目。您可以在 Survey 模型上调整 limit-per-participant 选项,或将它设置为 -1 以完全取消此限制。

Survey::create(['settings' => ['limit-per-participant' => 1]]);

请注意,如果激活了 accept-guest-entries 选项,此设置将被忽略。

验证

定义验证规则

在创建您的 Question 时添加一个 rules 属性,以指定收到的答案的验证逻辑。

Question::create([
    'content' => 'How many cats do you have?', 
    'rules' => ['numeric', 'min:0']
]);

请注意,与调查约束不同,问题验证器在创建条目的过程中不会自动触发。为了验证答案,您应该在控制器中手动运行验证(见下文)

验证提交

使用 Laravel 内置的验证器验证用户输入是否与 Survey 的整个规则集相符。

class SurveyEntriesController extends Controller
{
    public function store(Survey $survey, Request $request)
    {
        $answers = $request->validate($request, $survey->rules);
        
        (new Entry)->for($survey)->fromArray($answers)->push();
    }
}

视图

此软件包包含用于显示调查和一些基本问题类型的 Bootstrap 4.0 视图模板。这些视图仅作为示例,可能不足以满足您的最终需求。要在卡片中显示调查,请在视图中包含 survey 部分视图。

@include('survey::standard', ['survey' => $survey])

问题类型

以下是默认包含的问题类型

  • text - 接受文本答案
  • number - 接受数值答案
  • radio - 以单选按钮的形式显示选项,接受 1 个答案
  • multiselect - 以复选框的形式显示选项,接受多个答案

自定义视图

要自定义此软件包附带的模板视图,请运行带有 views 标签的 package:publish

php artisan vendor:publish --provider="MattDaneshvar\Survey\SurveyServiceProvider" --tag="views"

这将创建一个全新的 vendor/survey 目录,您可以在其中完全自定义调查视图以符合您的喜好。

创建新的问题类型

一旦您发布了此包附带视图,您可以通过实现新的模板来添加您自己的自定义问题类型。

例如,要实现一个新的 custom-select 类型,您应该在以下位置实现一个新模板:

<your-views-director>/vendor/survey/questions/types/custom-select.blade.php

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件