我有两个值的单选按钮,即Individual和Firm。
我正在寻找一种方案,如果选择了具有值Firm的单选按钮,那么CompanyName
textinput应该作为强制(必需)字段。并且,当选择具有值Individual的单选按钮时,CompanyName
textinput应该作为可选字段。
我没有得到怎么做。我尝试在CompanyName textinput中添加addAttribute作为必需。但由于RegisterForm.php
(模型)指定的规则很少,它没有起作用。
所以,任何想法都是如何做到的。我没有得到。有什么帮助吗?
register.php (查看)
<?php $form = ActiveForm::begin(['id' => 'register-form']); ?>
.
.
.
<?= $form->field($model, 'AdminType')
->radioList(array('Individual'=>'An Individual', 'Firm'=>'Firm/Company/Group of Employees'))
->label('Are You')?>
<?= $form->field($model, 'CompanyName')->textInput()->label('Company Name') ?>
<div class="form-group">
<?= Html::submitButton('Register', ['class' => 'btn btn-success', 'name' => 'register-button' ]) ?>
</div>
<?php ActiveForm::end(); ?>
<script>
$('input[type="radio"]').click(function()
{
if($(this).attr("value")=="Firm")
{
$('#registerform-companyname').addAttribute("required");
}
});
</script>
RegisterForm.php (型号)
<?php
namespace app\models;
use Yii;
use yii\base\Model;
use kartik\password\StrengthValidator;
class RegisterForm extends Model
{
public $fname;
public $lname;
public $email;
public $password;
public $confirmPassword;
public $AdminType;
public $CompanyName;
public $verifyCode;
public function rules()
{
return [
[['fname','lname', 'email', 'password','confirmPassword','verifyCode','AdminType'], 'required'],
['email', 'email'],
['confirmPassword', 'compare', 'compareAttribute' => 'password'],
['verifyCode', 'captcha'],
];
}
答案 0 :(得分:1)
首先,进行任何类型的前端验证都是不好的,因为我可以通过编程方式生成帖子来规避它,并且它会保存记录而不会出现任何问题,从而使得记录不一致的可能性成为现实。
您要做的是在模型中创建自定义验证规则函数,并将规则添加到验证数组中:
<?php
namespace app\models;
use Yii;
use yii\base\Model;
use kartik\password\StrengthValidator;
class RegisterForm extends Model
{
public $fname;
public $lname;
public $email;
public $password;
public $confirmPassword;
public $AdminType;
public $CompanyName;
public $verifyCode;
public function rules()
{
return [
[['fname','lname', 'email', 'password','confirmPassword','verifyCode','AdminType'], 'required'],
['email', 'email'],
['confirmPassword', 'compare', 'compareAttribute' => 'password'],
['verifyCode', 'captcha'],
//add rule that uses the validator function
['AdminType','radioValidator'],
];
}
//implement the validator
public function radioValidator($attribute, $params)
{
if($this->$attribute === 'Firm' && empty($this->$attribute))
$this->addError('CompanyName', 'CompanyName cannot be blank');
}
}
?>
现在,您的字段生成代码应该如下所示
<?= $form->field($model, 'CompanyName')->textInput()->label('Company Name')->error() ?>
击> <击> 撞击> 希望这可以帮助你
编辑:因为我习惯使用AR类(通常,当使用gii生成时,会自动进行验证),我不会想到您只使用表单模型(作为一个表单模型)基本应用程序中的示例)
忘记字段中的->error()
,同时确保您拥有行
if ($model->load(Yii::$app->request->post()) && $model->validate()) {...}
在你的行动中
答案 1 :(得分:1)
最后我知道了,
['company_name', 'required', 'when' => function($model){
return ($model->user_type == 'Firm' ? true : false);
}, 'whenClient' => "function (attribute, value) {
return $('input[type=\"radio\"][name=\"Users[user_type]\"]:checked').val() == 'Firm';
}"],