proklung / bitrix-webform-bundle
适用于 Bitrix + Symfony 的 Bundle,用于处理 Web 表单
1.1.2
2021-08-08 16:23 UTC
Requires
- php: >=7.3
- egulias/email-validator: ^2.1 || ^3
- giggsey/libphonenumber-for-php: ^8.12
- illuminate/translation: ~6 | ~7 | ~8
- illuminate/validation: ~6 | ~7 | ~8
- symfony/config: ^4.4 || ^5.0
- symfony/dependency-injection: ^4.4 || ^5.0
- symfony/http-kernel: ^4.4 || ^5.0
Requires (Dev)
README
为什么?
显然,将表单结果保存到信息块中更方便,但遗憾的是,我们不得不处理 Web 表单。比我们希望的更频繁。因此,产生了简化处理 Web 表单的愿望。
此外,还提供了一套与 Bitrix 兼容的 Web 表单验证器(在加载 Bundle 时自动获取)。
INTERNAL
安装
composer require proklung/bitrix-webform-bundle
验证器
- 电子邮件 - 使用 https://github.com/egulias/EmailValidator
- Laravel 验证器 - 使用 https://github.com/illuminate/validation
- 数字验证器
- 电话号码验证器 - 使用 https://github.com/giggsey/libphonenumber-for-php
- 文本长度验证器(最小值,最大值)
- 字段值唯一性验证器 - 该字段值是否已存在于 Web 表单的数据库中。例如,可以限制多次输入同一个电子邮件或电话号码。
- 正确 HTTP 地址验证器
示例
辅助服务 CreateWebForm
,用于在迁移中(例如)更舒适地创建表单。
use Prokl\BitrixWebformBundle\Services\Migrations\CreateWebForm; /** * @var CreateWebForm $creator */ $creator = container()->get('bitrix_form_bundle.create_form'); $creator->deleteFormByCode('TESTING_FORM'); $creator->setNameForm('Тестировочная форма') ->setMenuItem(['ru' => 'Тестировочная форма', 'en' => 'Testing']) ->setSort(1000) ->setSidForm('TESTING_FORM') ->createForm() ->addTextField('EMAIL', 'Электронный адрес') ->addRadioButtonYesNow('RIGHTS', 'Вы гуманоид?') ->addTextField('NAME', 'Ваше имя') ->addTextareaField('COMMENTS', 'Комментарии') ->addDropdown('DROPS', 'Список', [ 'LIST1', 'LIST2' ]) ->addQuestions() ->createEmailTemplate() ->createStatus();
保存结果
字段命名:表单的答案称为 NAME,在表单处理器的参数数组中也应该有 NAME 元素。
use Prokl\BitrixWebformBundle\Services\FormProcessor; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class FormController extends AbstractController { public function action(Request $request, FormProcessor $processor) : Response { $params = $request->request->all(); $result = $processor->setFormCode('TESTING_FORM') ->setData($params) ->processForm(); return new Response(['id_answer' => $result]); } }
通过表单搜索
字段命名 - 与保存结果时相同。
use Prokl\BitrixWebformBundle\Services\FormSearcher; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class FormController extends AbstractController { public function action(Request $request, FormSearcher $searcher) : Response { /** $params = [ 'NAME' => '1111', 'EMAIL' => 'email@email.ru', ]; */ $params = $request->request->all(); $result = $searcher->addFilter($params) ->setIdForm(8) // Допустимо использовать setFormCode('Символьный код формы') ->exist(); return new Response(['already_exists' => $result]); } }
表单助手
类 FormManager
getFormIdBySID(string $sid)
- 根据符号代码获取表单 ID;getFormAnswers(string $sid)
- 表单答案(不考虑多个问题!);getAllAnswersByIdQuestion(string $formCode, string $codeQuestion)
- 根据问题代码获取所有答案;getAnswersForm($questionID)
- 根据问题 ID 获取答案;
类 FormResult
add(int $idWebform, array $arValuesForm = [])
- 向 Web 表单模块的表单添加数据。输入参数 - 以 Bitrix 格式。类似这样
<pre>array ( * [WEB_FORM_ID] => 3 * [web_form_submit] => Отправить * * [form_text_18] => aafafsfasdf * [form_text_19] => q1241431342 * [form_text_21] => afsafasdfdsaf * [form_textarea_20] => * [form_text_22] => fasfdfasdf * [form_text_23] => 31243123412 * * 18, 19, 21 - ID ответов у вопросов * )</pre>