Модуль является оберткой над библиотекой валидации Laravel.
- php: >=5.6.4
- Bitrix: >= 17.0.0
- illuminate/validation: >=5.4
-
Необходимо установить
illuminate/validation
, через composer:php composer.phar install illuminate/validation 5.5
-
В файле
local/php_interface/init.php
подключить composer автозагрузчик:require_once(dirname(__FILE__) . '/../vendor/autoload.php');
-
Копируем репозиторий:
cd local/modules git clone [email protected]:ylabio/ylab.validation.git cd ylab.validation
-
В папку
local/modules
будет склонирован репозиторий модуля, после этого, необходимо в панели администратора установить модуль:Рабочий стол -> Marketplace -> Установленные решения
.
composer require ylab/validation:dev-master
Для установки в local/modules
, необходимо в composer.json добавить:
"extra": {
//путь до папки local, например ../local, если composer.json лежит в папке local
"bitrix-dir": ""
}
Для реализации компонента с валидацией, можно использовать пример кода:
local/modules/ylab.validation/install/components/ylab/validation.test/class.php
.
В данном примере класс компонента наследуется от абстрактного класса YLab\Validation\ComponentValidation
, который на
себя берет функцию инициализации объекта валидации и обязывает реализовать метод rules()
.
В конструкторе абстрактного класса объект валидатора инициализируется следующим образом:
$this->oValidator = ValidatorHelper::makeCustomValidator([], $this->rules(), $sFile, LANGUAGE_ID);
В методе ValidatorHelper::makeCustomValidator()
подключаются языковые файлы компонента и модуля. Языковые файлы модуля
содержат описание стандартных ошибок, наследуемый компонент может заменять предустановленные фразы ошибок на собственные.
Создать собственные правила валидации можно в компоненте в отдельном методе или методе executeComponent()
:
/**
* При необходимости в компоненте можно реализовать дополнительные правила валидации, например, данный валидатор
* проверяет наличие пользователя в базе данных по ID.
*/
$this->oValidator->addExtension('user_exists', function($attribute, $value, $parameters, $validator) {
$arValidate = UserTable::getList([
'select' => ['ID'],
'filter' => ['=ID' => $value],
'limit' => 1
])->fetch();
return $arValidate['ID'] ? true : false;
});