proklung/bitrix-webform-bundle

适用于 Bitrix + Symfony 的 Bundle,用于处理 Web 表单

安装: 44

依赖: 1

建议者: 0

安全: 0

星星: 2

关注者: 1

分支: 0

公开问题: 0

类型:symfony-bundle

1.1.2 2021-08-08 16:23 UTC

This package is auto-updated.

Last update: 2024-09-08 23:12:50 UTC


README

为什么?

显然,将表单结果保存到信息块中更方便,但遗憾的是,我们不得不处理 Web 表单。比我们希望的更频繁。因此,产生了简化处理 Web 表单的愿望。

此外,还提供了一套与 Bitrix 兼容的 Web 表单验证器(在加载 Bundle 时自动获取)。

INTERNAL

安装

composer require proklung/bitrix-webform-bundle

验证器

  1. 电子邮件 - 使用 https://github.com/egulias/EmailValidator
  2. Laravel 验证器 - 使用 https://github.com/illuminate/validation
  3. 数字验证器
  4. 电话号码验证器 - 使用 https://github.com/giggsey/libphonenumber-for-php
  5. 文本长度验证器(最小值,最大值)
  6. 字段值唯一性验证器 - 该字段值是否已存在于 Web 表单的数据库中。例如,可以限制多次输入同一个电子邮件或电话号码。
  7. 正确 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>