[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как менять сценарий валидации динамически?
ilya1991
Здравствуйте! 
Есть форма, у которой меняются input-ы, в зависимости от того, какой способ доставки выберет пользователь
user posted image


как в зависимости от выбора пользователя можно динамически менять сценарий валидации?

Код контроллера:
class ApplicationController extends Controller
{
    public function actionNewApplication1()
    {
        $model = new Application1();
        $model->scenario = Application1::SCENARIO_CAR;

        $model->load(Yii::$app->request->post());


        return $this->render('new-application1', compact('model'));
    }

}


Код модели:
class Application1 extends Model
{
    const SCENARIO_CAR = 'car';
    const SCENARIO_TRAIN = 'train';

    public $customer;
    public $delivery_method;
    public $plant;
    public $station;
    public $oil_base;
    public $numberDrivers;


    public function scenarios()
    {
        return [
            self::SCENARIO_CAR => [
                'customer',
                'delivery_method',
                'oil_base',
                'numberDrivers',
            ],
            self::SCENARIO_TRAIN => [
                'customer',
                'delivery_method',
                'plant',
                'station',
            ],
        ];
    }
   

    public function rules()
    {
        return [
            [['customer',
              'delivery_method',
            ], 'required',],
            [[
                'oil_base',
                'numberDrivers',
            ], 'required','on' => self::SCENARIO_CAR],
            [[
                'plant',
                'station',
            ], 'required','on' => self::SCENARIO_TRAIN],
           

        ];
    }

}


Код вьюхи:
<?php
use yii
\widgets\ActiveForm;
use yii\helpers\Html;
?>

<?php
$form = ActiveForm::begin(['id' => 'registration-form', 'enableAjaxValidation' => true]);

echo $form->field($model, 'customer');
echo $form->field($model, 'delivery_method')->dropDownList([0 => 'Не выбрано', 1 => 'ЖД ТРАНСПОРТ', 2 => 'АВТОТРАНСПОРТ']);

echo $form->field($model, 'plant');
echo $form->field($model, 'station');

echo $form->field($model, 'oil_base',['options' => ['class' => 'hidden']]);
echo $form->field($model, 'numberDrivers',['options' => ['class' => 'hidden']]);


echo Html::submitButton('Сформировать', ['class' => 'btn btn-default']);
ActiveForm::end();
?>



JS код

$('#application1-delivery_method').change(function () {

var id = $(this).val();

var plant = $('.field-application1-plant');
var station = $('.field-application1-station');

var oil_base = $('.field-application1-oil_base');
var numberDrivers = $('.field-application1-numberdrivers');


if (id == 2) {
oil_base.removeClass('hidden');
numberDrivers.removeClass('hidden');
plant.addClass('hidden');
station.addClass('hidden');

} else {
oil_base.addClass('hidden');
numberDrivers.addClass('hidden');
plant.removeClass('hidden');
station.removeClass('hidden');
}

}
);

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.