matt-daneshvar / laravel-survey
在您的 Laravel 应用中创建调查
Requires
- php: ^7.3|^7.4|^8.0|^8.1|^8.2|^8.3
- illuminate/database: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- illuminate/http: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- laravel/legacy-factories: ^1.1
- mockery/mockery: ^1.3.2|^1.4
- orchestra/testbench: ^4.0|^5.0|^6.0|^7.0|^8.0|^9.0
- phpunit/phpunit: ^8.0|^9.0|^10.0
README
在您的 Laravel 应用中创建和管理调查。
此视频 演示了安装此软件包并创建一个基本调查的过程。
安装
使用 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)。有关更多信息,请参阅 许可证文件。