2013-06-18 2 views
1

У меня есть расширение yii-пользователя и добавлен некоторый столбец в таблицу tbl_profile для регистрации. Тип регистрации являются два типа: Личные и компанияПодтвердить выбранную кнопку выбора камеры

следующие колонки добавил:

Для компании: company_name, comoany_type

Для личного: телефон

Для обоих личные и компании: мобильные, полное имя, страна, штаты, почтовый_код, адрес1, адрес2

У меня есть jquery, чтобы скрыть и отключить поле ввода формы в соответствии с выбором переключателя типа регистрации.

То же касается выбора страны для обоих типов регистрации. Два варианта: например, США и другая страна

Я смущен тем, что как я могу проверить свойство в соответствии с выбранным типом регистрации. например Если я выберу личную, отключите проверку для поля собственности компании.

Есть две модели с их собственности:

Профиль: FullName, company_name, company_type, мобильный, телефон, firstaddress, secondaddress, страна, страны, postal_code

RegistrationForm: имя пользователя, пароль , email

Я также определяю правила для этих свойств на соответствующей модели.

я попытался проверки модели, как это, но не работает:

if(isset($_POST['RegistrationForm'])) { 
    if($_POST['Profile']['account_type'] == 'personal') 
    { 
     //for personal account 
     $profile->account_type = $_POST['Profile']['account_type']; 
     $model->username = $_POST['RegistrationForm']['username']; 
     $model->password = $_POST['RegistrationForm']['password']; 
     $model->verifyPassword = $_POST['RegistrationForm']['verifyPassword']; 
     $model->email = $_POST['RegistrationForm']['email']; 
     $model->verifyCode = $_POST['RegistrationForm']['verifyCode']; 
     $model->accept = $_POST['RegistrationForm']['accept']; 
     $profile->fullname = $_POST['Profile']['fullname']; 
     $profile->phone = $_POST['Profile']['phone']; 
     $profile->ext = $_POST['Profile']['ext']; 
     $profile->mobile = $_POST['Profile']['mobile']; 
     if($_POST['choose_country'] == 'other') 
     { 
      $profile->country = $_POST['choose_country']; 
      $profile->states = $_POST['profile_states']; 
      $profile->postalcode = $_POST['Profile']['postalcode']; 
      $profile->firstaddress = $_POST['Profile']['firstaddress']; 
      $profile->secondaddress = $_POST['Profile']['secondaddress']; 
     } 
     if($_POST['choose_country'] == 'Nepal') 
     { 
      $profile->country = $_POST['choose_country']; 
      $profile->firstaddress = $_POST['Profile']['firstaddress']; 
      $profile->secondaddress = $_POST['Profile']['secondaddress']; 
     } 
    } 
    if($_POST['Profile']['account_type'] == 'company') 
    { 
     //for organization account 
     $profile->account_type = $_POST['Profile']['account_type']; 
     $model->username = $_POST['RegistrationForm']['username']; 
     $model->password = $_POST['RegistrationForm']['password']; 
     $model->verifyPassword = $_POST['RegistrationForm']['verifyPassword']; 
     $model->email = $_POST['RegistrationForm']['email']; 
     $model->verifyCode = $_POST['RegistrationForm']['verifyCode']; 
     $model->accept = $_POST['RegistrationForm']['accept']; 
     $profile->fullname = $_POST['Profile']['fullname']; 
     $profile->ext = $_POST['profile']['ext']; 
     $profile->mobile = $_POST['Profile']['mobile']; 
     $profile->company_name = $_POST['Profile']['company_name']; 
     $profile->company_type = $_POST['Profile']['company_type']; 
     $profile->designation = $_POST['Profile']['designation']; 

     if($_POST['choose_country'] == 'Nepal') 
     { 
      $profile->country = $_POST['choose_country']; 
      $profile->states = $_POST['Profile']['states']; 
      $profile->postalcode = $_POST['Profile']['postalcode']; 
      $profile->firstaddress = $_POST['profile']['firstaddress']; 
      $profile->secondaddress = $_POST['profile']['secondaddress']; 
     } 
     if($_POST['choose_country'] == 'others') 
     { 
      $profile->country = $_POST['profile']['country']; 
      $profile->firstaddress = $_POST['profile']['firstaddress']; 
      $profile->secondaddress = $_POST['profile']['secondaddress']; 
     } 
    } 

    //$model->attributes=$_POST['RegistrationForm']; 
    //$profile->attributes=((isset($_POST['Profile'])?$_POST['Profile']:array())); 

    if($model->validate()&&$profile->validate()) 
    { 
    } 
} 

Проблема:

Если я выбираю кнопку личного радио и отправить форму он еще проверить COMPANY_NAME, тип компании а также для выбора страны, а затем показывает ошибки проверки. Здесь я хочу отключить проверку модели в зависимости от выбора переключателя как личного, так и фирменного типа.

ответ

1

Я никогда не работал с yii-user расширением, но и как решение, которое я могу предложить, чтобы ограничить компании и личные валидаций, установив разные scenarios для $profile модели в зависимости от $_POST['Profile']['account_type'] непосредственно перед присвоением значений модели из $_POST, например:

if ($_POST['Profile']['account_type'] === "personal") 
    $profile->scenario = "personal"; 
else 
    $profile->scenario = "company"; 

После этого в rules() методе вашей Profile модели указать соответствующий сценарий для каждого типа учетной записи зависимого поля:

public function rules() { 
    return array(
     // ...general rules 
     array("company_name", "validateCompanyName", 'on' => array("company")), 
     array("company_type", "validateCompanyType", 'on' => array("company")), 
     array("phone", "validatePersonalPhone", 'on' => array("personal")) 
    ) 
} 

Я считаю, что таким образом он будет достаточно, чтобы присвоить значение модели как это:

$model->attributes = $_POST['RegistrationForm']; 
$profile->attributes = $_POST['Profile']; 
+0

что такое validateCompanyName, validateCompanyType, ValidatePersonalPhone. Нам нужно определить эти правила? или как это указано. – CodeManiac

+0

Это имена возможных [настраиваемых методов проверки] (http://www.yiiframework.com/wiki/168/create-your-own-validation-rule/), объявленных в вашей модели «Профиль». Вы можете использовать [предопределенные правила проверки] (http://www.yiiframework.com/wiki/56/), если они вам подходят. – Ezze

+0

Я бы не рекомендовал использовать сценарии для этого, потому что вы больше не можете использовать сценарии 'update' и' insert', которые много используются во всем Yii. Просто напишите пользовательскую функцию проверки, которая проверяет на основе свойства registrationType. http://www.yiiframework.com/wiki/168/create-your-own-validation-rule/ Убедитесь, что вы заглянули http://www.yiiframework.com/doc/guide/1.1/en/form.model # securing-attribute-assignments –

Смежные вопросы