?>

Travail avancé avec le concepteur de formulaire dans le CMS SkeekS

Travail avancé avec le concepteur de formulaire dans le CMS SkeekS
Parfois, des tâches surviennent lorsque vous devez ajouter une validation complexe et personnalisée aux formulaires créés via le concepteur de formulaires. Par exemple, il y a un email dans le formulaire et vous devez vraiment vérifier qu'il s'agit bien d'un email. À ces fins, il existe une solution simple.

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

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

 

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

Tous les commentaires (0)
Sans commentaires