【问题标题】:Textfield Mandatory On basis of radio button selection- Yii2Textfield Mandatory 基于单选按钮选择 - Yii2
【发布时间】:2015-10-05 19:23:30
【问题描述】:

我有两个值的单选按钮,即个人和公司。 我正在寻找一种情况,如果选择了具有值 Firm 的单选按钮,则 CompanyName textinput 应作为强制(必需)字段。 And, when radio button having value Individual is selected, Then CompanyName textinput should act as Optional field.

我不知道该怎么做。我尝试在 CompanyName 文本输入中添加 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'],
        ];
    }

【问题讨论】:

    标签: php yii2 yii2-basic-app


    【解决方案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 生成时,会自动进行验证),我并没有想到您只使用了一个表单模型(作为一个基本应用中的示例)

    忘记字段中的-&gt;error(),还要确保你有行

    if ($model-&gt;load(Yii::$app-&gt;request-&gt;post()) &amp;&amp; $model-&gt;validate()) {...}

    在你的行动中

    【讨论】:

    • 我也在这里问过我的问题@SmartCoder。请在此查看stackoverflow.com/questions/32969883/…
    • 对不起@SmartCoder。还是行不通。感到非常抱歉。但是,不工作。一整天都在尝试这个。但是,不幸的是,我昨天还在那儿。
    【解决方案2】:

    我终于明白了,

     ['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';
      }"],
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 2018-10-11
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      相关资源
      最近更新 更多