"Повторите пароль" при регистрации

Есть модель Companies (спискок компаний).

При регистрации компании нужно, чтобы пароль вводился 2 раза в два разных поля ("пароль" и "повторите пароль")

Есть мысль сделать это добавив в модель переменную $passwd2, но будет ли это оптимально? Ведь эта переменная будет использоваться только при регистрации или смене пароля.

Что посоветуете?

посоветую назвать поле - password_repeat т.к. с таким названием будет сразу валидироваться с полем password и добавить в рулесы модели on register

array(‘password_repeat’, ‘required’, ‘on’=>‘register’),




public function rules()

{

    return array(

        array('username, password', 'required'),

        array('password_repeat', 'required', 'on'=>'register'),

        array('password', 'compare', 'on'=>'register'),

    );

}



http://www.yiiframework.com/doc/api/CCompareValidator

Более подробно описано тут:

CCompareValidator compares the specified attribute value with another value and validates if they are equal.

The value being compared with can be another attribute value (specified via compareAttribute) or a constant (specified via compareValue. When both are specified, the latter takes precedence. If neither is specified, the attribute will be compared with another attribute whose name is by appending "_repeat" to the source attribute name.

И ещё тут можешь почитать

http://www.yiiframework.com/doc/guide/form.model#declaring-validation-rules

Добавил в модель переменную


public $usr_password_repeat;

И в правило для начала:


array('usr_password_repeat', 'required', 'on'=>'register'),

В представлении так:


<div class="row">

	<?php echo $form->labelEx($model,'usr_password_repeat'); ?>

	<?php echo $form->textField($model,'usr_password_repeat',array('size'=>45,'maxlength'=>45)); ?>

	<?php echo $form->error($model,'usr_password_repeat'); ?>

</div>

Но фреймфорк почему-то не считает данный атрибут "обязательным". Т.е. сабмит и запись формы проходят даже при незаполненном поле.

Действие называется register.

Попробовал убрать ‘on’=>… атрибут стал отображаться как обязательный.

Почему так? ведь действие то называется именно register?

попробуй так

array(‘usr_password_repeat’, ‘required’),

странно

У меня вот так всё работает




public function rules()

{

    return array(

        array('username, password', 'required'),

        array('password_repeat', 'required', 'on'=>'register'),

        array('password', 'compare', 'on'=>'register'),

    );

}



А что у тебя в контроллере?




// создаём модель User и задаём её сценарий как `register`. Выражение ниже

эквивалентно следующему:

// $model=new User;

// $model->scenario='register';

$model=new User('register');

 

// наполняем модель данными

$model->attributes=$_POST['User'];

 

// проводим валидацию

if($model->validate())   // если данные верны

    …

else

    …



Спасибо! Исправил в контролере:

И все заработало.

А для чего используется вышеописанная конструкция?

А вот как раз для этого чтобы сообщить модели какой сценарий использовать

Вот интересно, какой смысл использовать сценарий "register" если есть штатный "insert" который по умолчанию для новой записи устанавливается?

з.ы.: для уже существующей по умолчанию устанавливается кажется "update"

Смысл использовать register в том, что регистрация происходит пользователем, а update и insert администраторами, при работе с пользовательскими данными.