applyflow / screen-questions
Laravel 屏幕问题包允许您向任何 Laravel 模型添加自定义字段,并将对这些字段的响应存储在任何 Laravel 模型中。
Requires
- php: ^7.4|^8.0
- illuminate/support: ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
README
⚠️ 警告:这些文档可能不完整,可能引用了不受支持的函数。这是一个预发布版本,目前尚未准备好用于生产使用。
Laravel 自定义字段包允许您向任何 Laravel 模型添加自定义字段,并将这些字段的响应与其它模型关联。
安装
要开始使用,请将 givebutter/laravel-custom-fields 包添加到您的 composer.json 文件中,并更新您的依赖项。
composer require givebutter/laravel-custom-fields
发布迁移
php artisan vendor:publish --provider="Applyflow\LaravelScreenQuestions\LaravelScreenQuestionsServiceProvider" --tag="migrations"
运行迁移
php artisan migrate
您可以使用配置选项自定义表名。关于这一点稍后介绍。
示例 - 问卷调查应用
出于文档说明的目的,让我们使用构建问卷调查应用的示例。管理员可能使用后端创建充满问题的 问卷调查,而最终用户可能会填写这些问卷,生成 问卷响应。
准备您的模型
添加自定义字段
要添加基本的自定义字段支持,只需在您的模型顶部添加 HasScreenQuestions 特性。
use Illuminate\Database\Eloquent\Model; use Applyflow\LaravelScreenQuestions\Traits\HasScreenQuestions; class Survey extends Model { use HasScreenQuestions; // ... }
添加自定义字段响应
接下来,我们添加支持存储自定义字段响应。我们将在 SurveyResponse 模型顶部简单引入 HasScreenQuestionResponses 特性。
use Illuminate\Database\Eloquent\Model; use Applyflow\LaravelScreenQuestions\Traits\HasScreenQuestionResponses; class SurveyResponse extends Model { use HasScreenQuestionResponses; // ... }
基本用法
创建字段
您可以将字段添加到模型中,如下所示
$survey->screenQuestions()->create([ 'title' => 'What is your name?', 'type' => 'text' ]);
每个字段可以包含以下内容:(稍后介绍这些内容)
title:自定义字段的标题/问题。 description:字段的描述。这对于为填写字段的用户提供更多上下文很有用。 type:您正在创建的字段类型。可用的类型将在下一节中概述。 required:表示字段是否必需的布尔值。 options:具有用户选择的字段的可接受值的数组。
创建字段响应
要存储字段上的响应,您可以这样做
$field->responses()->create([ 'value' => 'John Doe' ]);
检索字段
要检索自定义字段,请使用 screenQuestions 关系。
$survey->screenQuestions()->get();
检索字段响应
要检索字段上的响应,请使用 responses 关系。
$field->responses()->get();
自定义字段类型
自定义字段可以是以下 5 种类型之一
text:自由输入字段,存储为字符串。适用于简单的输入,因为这些字段的最大长度为 255 个字符。textarea:自由输入字段,存储为文本列。适用于可能不适合text字段的长文本。radio:这些是多选字段,您需要传递一个options属性。select:这些是多选字段,您需要传递一个options属性。checkbox:布尔字段。
通常,这些字段类型对应于它们的相应 HTML 元素。将来,我们可能为这些字段提供前端脚手架,但现在这取决于您。
请注意:radio 和 select 字段类型需要您在字段上填写 options 属性。这是一个简单的字符串数组,是字段的合法响应。例如
$survey->screenQuestions()->create([ 'title' => 'What is your favorite color?', 'type' => 'select', 'answers' => ['Red', 'Green', 'Blue', 'Yellow'], ]);
验证响应
验证助手
在大多数情况下,您会在保存之前验证自定义字段的响应。您可以通过在模型上调用 validateScreenQuestions 函数来完成此操作。
$responses = [ '1' => "John Doe", '2' => "Blue" ]; $survey->validateScreenQuestions($responses);
您还可以传入一个 Request 对象。
use Request; class FooController extends Controller { public function index(Request $request) { $validation = $survey->validateScreenQuestions($request); // ... } }
<form> <input type="text" name="custom_fields[]" /> </form>
当使用 Request 对象时,输入键应是一个包含值的数组。
隐式验证规则
上面描述的5种支持的字段类型将自动应用以下验证规则
text:string|max:255textarea:stringradio:string|max:255|in:answersselect:string|max:255|in:answerscheckbox:in:0,1
重要:当使用复选框时,您必须同时提交未选中的复选框,否则您的响应数据可能不完整。
必填字段
由于它们很常见,必填字段在此包中具有原生支持。要标记字段为必填,只需在创建自定义字段时将 required 设置为 true 即可。
$survey->screenQuestions()->create([ 'title' => 'Do you love Laravel?', 'type' => 'radio', 'options' => ['Yes', 'YES'], 'required' => true ]);
自定义验证规则
除了内置验证规则外,您还可以将自定义规则应用到任何自定义字段。例如,如果您想验证一个字段是介于1和10之间的整数,您可以这样做
$survey->screenQuestions()->create([ 'title' => 'Pick a number 1-10', 'type' => 'text', 'validation_rules' => 'integer|min:1|max:10' ]);
记住,validation_rules 支持Laravel中所有可用的验证规则。
验证规则集
-> 呢?在某些情况下,定义验证规则集更容易也更实用。例如,在我们的调查应用中,如果我们想提供一个
保存响应
要存储自定义字段的响应,只需调用 saveScreenQuestions() 并传入一个值数组
saveScreenQuestions 函数可以接受请求或数组。
$surveyResponse->saveScreenQuestions([' ']);
如果您正在提交表单请求,您可以轻松地
Use App\... $surveyResponse->saveScreenQuestions($request->input);
查询响应
您可以通过使用 WhereScreenQuestion 范围查询任何字段的响应。该函数接受字段对象和您要查找的值。有关查询范围更多信息,请访问 此链接。
例如,如果您想找到所有带有 large T恤尺度的 SurveyResponses,请执行以下查询
Use App\Models\SurveyResponse; Use App\Models\SurveyResponse; $field = SurveyResponse::WhereScreenQuestion($field, 'large')->get();
排序
您可以通过使用 order 函数更改模型上自定义字段的顺序。传入一个数组或 Collection 的id。字段的索引位置表示它的顺序位置。
$survey->orderScreenQuestions([2, 4, 5]); // Field with id 2 will be ordered first.
您还可以手动更改 order 列的值
$field->order = 3; $field->save();
默认情况下,通过关系检索时,自定义字段按升序返回
$survey->screenQuestions()->get(); // Returned in ascending order.
配置
要发布配置文件,请运行以下命令
php artisan vendor:publish --provider="Applyflow\LaravelScreenQuestions\LaravelScreenQuestionsServiceProvider" --tag="config"
配置文件现在应该已发布在 config/custom-fields.php 中。可用的选项及其用法在发布的文件中解释。