php - 文本字段强制 基于单选按钮选择 - Yii2

标签 php yii2 yii2-basic-app

我的单选按钮有两个值,即个人和公司。 我正在寻找一种场景,如果选择了具有值“公司”的单选按钮,则“CompanyName”文本输入应充当强制(必填)字段。并且,当选择值为“Individual”的单选按钮时,CompanyName 文本输入应充当可选字段。

我不知道该怎么做。我尝试在 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
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()) {...}

在你的行动

关于php - 文本字段强制 基于单选按钮选择 - Yii2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32956293/

相关文章:

mysql - 使用 Yii2 查询从带有函数的 MySQL 选择返回值

php - 调用未定义的方法 app\models\Message::model()

php - c9.io php pdo 连接到 mysql

zend 框架 2 中的 phpexcel fatal error : Class 'PHPExcel_IOFactory' not found

php - 在 PHP 中包含问题

php - 使用 yii2 备份 MySQL 表时出错

gridview - 如何使 Yii2 GridView 响应式?

twitter-bootstrap-3 - 如何在 yii2 的 Admin LTE 中创建水平滚动条?

php - 访客用户和登录用户的两种不同布局- Yii2

php - 未定义索引 : PHP checkbox