Yii2 - валидация, сравнение, странное поведение

Проверка сравнения - это странное действие - несмотря ни на что, электронные письма никогда не бывают одинаковыми, и ошибка отображается все время.

Это код для проверки:

public function rules()
    {
        return [

            [['first_name', 'last_name', 'email', 'conf_email'], 'required'],
            ['title', 'match', 'pattern' => '/^[a-zA-Z]{0,100}$/',
                'message' => 'Title must contain only letters.'],
            [['first_name', 'last_name'], 'match', 'pattern' => '/^[a-zA-Z]{0,45}$/', 
                'message' => 'The {attribute} must contain only letters.'],
            [['email', 'first_name', 'last_name'], 'trim'],
            [['email', 'conf_email'], 'email'],
            ['email', 'string', 'max' => 255],
            ['email', 'UniqueValidator'],
            ['conf_email', 'compare', 'compareAttribute'=>'email', 'skipOnEmpty' => false, 
                'message' => 'Emails do not match.'],
        ];
    }

И код формы:

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\Url;

$form = ActiveForm::begin([
        'action' => Url::toRoute([
            'team/ajax-add-team-member',
            'id'       => $team->idteam,
            'portalID' => $portal->idportal
        ]),
        'enableAjaxValidation' => true,
        'validationUrl'        => '/team/team-validation',
        'id'                   => 'team-invite-form',
        'options'              => [
            'class' => 'clearfix'
        ]
]) ?>

<div class="col-md-12">
    <div class="row">
        <div class="col-md-2 col-sm-2 col-xs-12">
            <?php echo $form->field($model, 'title')->textInput() ?>
        </div>
        <div class="col-md-5 col-sm-5 col-xs-12">
            <?php echo $form->field($model, 'first_name')->textInput() ?>
        </div>
        <div class="col-md-5 col-sm-5 col-xs-12">
            <?php echo $form->field($model, 'last_name')->textInput() ?>
        </div>
    </div>
</div>

<div class="col-md-12">
    <?php
        echo $form->field($model, 'email')->textInput();
        echo $form->field($model, 'conf_email')->textInput();
        echo $form->field($model, 'is_medical_professional')->checkbox();
    ?>
</div>

<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<?php
    echo Html::submitButton('Send', ['id' => 'add-team-member-form-btn', 'class' => 'btn btn-default']);
    ActiveForm::end();
?>

Что здесь происходит О?


person Sasha    schedule 18.04.2016    source источник
comment
Я вижу, вы обрезаете электронную почту, но не conf_email, попробуйте обрезать оба или ничего   -  person Gramotei    schedule 19.04.2016
comment
Как заявил Хутси, электронная почта должна быть уникального типа (почему она вообще должна быть уникальной?). А вы уверены в названии, имени и фамилии? Правила даже не допускают пробелов. Поэтому я подозреваю, что у вас разные типы ошибок, но вы думаете, что это вызвано только правилом сравнения. Или вы уверены в ошибке? Какую ошибку вы получаете?   -  person robsch    schedule 19.04.2016
comment
Можете ли вы показать полную модель и код действия?   -  person Alex    schedule 19.04.2016


Ответы (1)


Эта строка выглядит странно:

['email', 'UniqueValidator'],

Попробуйте вместо этого использовать ['email', 'unique'],

Если это не поможет - дайте более подробную информацию. С какой именно ошибкой вы столкнулись?

person aderushev    schedule 18.04.2016
comment
Ничего не изменилось. Возникает ошибка: Электронные письма не совпадают. - person Sasha; 18.04.2016
comment
@Саша Попробуйте удалить вариант 'skipOnEmpty' => true - person aderushev; 18.04.2016