Skip to content

Формы

Предупреждение

Для работы с формами крайне не рекомендуется использовать модуль битрикс form.

Описание

Каждая форма на сайте на бекенде является классом формы \Realweb\Api\Model\Form\Entity с описанием полей формы.

Форма должна иметь название и метод отправки

php
protected ?string $_method = "post";
protected ?string $_name = "form-name";

Доступные методы

  • GET
  • POST
  • PUT
  • PATCH

Форма должна реализовывать protected методы _init*, которые описывают поля формы.

Пример
php
protected function _initName(): void
	{
		$obField = $this->createInputText("name")
			->setLabel("Имя")
		;
	}

Поля формы

Форма может иметь следующие поля:

  • Button - кнопка
  • GoogleCaptcha - Google reCAPTCHA v3
  • InputCheckbox - чекбокс
  • InputEmail - email
  • InputFile - файл
  • InputHidden - скрытое поле
  • InputNumber - число
  • InputPassword - пароль
  • InputPhone - телефон
  • InputRadio - радио
  • InputSubmit - кнопка submit
  • InputText - текст
  • Privacy - согласие на обработку персональных данных
  • Select - список выбора
  • Textarea - текстарея
  • Group - группа полей

Поля добавляются на форму магическим методом create* с названием поля, например, createInputText

Валидация

Для валидации значения поля используются специальные валидоры - экземпляры класса \Realweb\Api\Model\Form\Validate\Entity.

Валидатор добавляется к полю методом addValidator

Пример
php
protected function _initName(): void
	{
		$obField = $this->createInputText("name")
			->setLabel("Имя")
			->addValidator(
				(new \Realweb\Api\Model\Form\Validate\Entity\Required())->setMessage('Поле "Имя" обязательно для заполнения')
			)
		;
	}

Форма валидируется с помощью метода isValid. При создании формы в нее передаются параметры запроса

php
use Realweb\Api\Module\Form;

$obForm = new Form\Model\Some\Form();
$obForm->initRequestParams($this->getRequestParams());
if (!$obForm->isValid()) {
  //Обработка ошибок
}

Список валидаторов

  • \Realweb\Api\Model\Form\Validate\Entity\Email - Формат email
  • \Realweb\Api\Model\Form\Validate\Entity\GoogleCaptcha - валидация отправленной GoogleCaptcha
  • \Realweb\Api\Model\Form\Validate\Entity\Phone - телефон, не рекомендуется к использованию, рекомендуется использовать проверку Dadata
  • \Realweb\Api\Model\Form\Validate\Entity\Regex - регулярное выражение
  • \Realweb\Api\Model\Form\Validate\Entity\Required - обязательное заполнение
  • \Realweb\Api\Model\Form\Validate\Entity\Callback - коллбек, свой метод проверки, не рекомендуется к использованию *
  • \Realweb\Api\Model\Form\Validate\Entity\File\Error - корректная загрузка файла
  • \Realweb\Api\Model\Form\Validate\Entity\File\Extension - расширение файла
  • \Realweb\Api\Model\Form\Validate\Entity\File\Mime - тип файла
  • \Realweb\Api\Model\Form\Validate\Entity\File\Size - размер файла

Callback

Вместо валидатора Callback удобнее использовать свои валидаторы, наследующиеся от класса \Realweb\Api\Model\Form\Validate\Entity.

Каждый валидатор имеет метод setMessage - установка сообщения об ошибке

Создание своего валидатора

Свои валидаторы должны наследоваться от класса \Realweb\Api\Model\Form\Validate\Entity и реализовывать метод _isValid

php
protected function _isValid($mValue): bool
{
  if (strlen($mValue) > 0) {
    //Проверка
  }

  return true;
}

Пример

Пример реализации формы