?>

Erweiterte Arbeit mit dem Formular-Designer in SkeekS CMS

Erweiterte Arbeit mit dem Formular-Designer in SkeekS CMS
Manchmal entstehen Aufgaben, wenn Sie Formulare, die mit dem Formular-Designer erstellt wurden, komplexe, benutzerdefinierte Validierungen hinzufügen müssen. Beispielsweise enthält das Formular eine E-Mail, und Sie müssen wirklich prüfen, ob es sich um eine E-Mail handelt. Für diese Zwecke gibt es eine einfache Lösung.

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

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,
]

 

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

Alle Kommentare (0)
Keine Kommentare