?>

Продвинутая работа с конструктором форм в SkeekS CMS

Продвинутая работа с конструктором форм в SkeekS CMS
Иногда возникают задачи, когда нужно добавить сложную, кастомную валидацию в формы, которые были созданы через конструктор форм. Например, в форме есть email, и необходимо действительно проверять что это email. Для этих целей есть простое решение.

Предлагаю сделать следущее

1) Создать компонент common/components/ProjectComponent.php

<?php
/**
 * @link https://cms.skeeks.com/
 * @copyright Copyright (c) 2010 SkeekS
 * @license https://cms.skeeks.com/license/
 * @author Semenov Alexander <semenov@skeeks.com>
 */

namespace common\components;

use skeeks\cms\relatedProperties\models\RelatedPropertiesModel;
use skeeks\cms\validators\PhoneValidator;
use skeeks\modules\cms\form2\models\Form2FormSend;
use yii\base\BootstrapInterface;
use yii\base\Component;
use yii\base\Event;
use yii\base\Model;

/**
 * @author Semenov Alexander <semenov@skeeks.com>
 */
class ProjectComponent extends Component implements BootstrapInterface
{
    public function bootstrap($application)
    {
        Event::on(RelatedPropertiesModel::class, Model::EVENT_BEFORE_VALIDATE, function($e) {
            /**
             * @var $model RelatedPropertiesModel
             * @var $formSend Form2FormSend
             */
            $model = $e->sender;
            $formSend = $model->relatedElementModel;



            if ($formSend->form->code == 'calculate') {
                $model->addRule(['email'], 'email', ['enableIDN' => true]);
                $model->addRule(['phone'], PhoneValidator::class);
                //print_r($model->toArray());die;
            }
        });
    }
}

2) Поправить файл frontend/config/main.php

'bootstrap' => ['project'],

'components' => [
        
        'project' =>  \common\components\ProjectComponent::class,
]

 

Таким образом вы перехватываете событие начала валдиации данных (вернее даже, событие, которое возникает до начала валидации), и пишите свою валидацию, воплощая любую логику!

Все комментарии (0)
Нет комментариев