创造一个代码字段规则,如果该字段没有被禁用(Creating rules for a code fi

2019-07-29 09:40发布

我有一个字段customercode。 这将是禁用的,如果列表框的值是员工,如果列表框的值是admin启用。 如果管理的情况下,需要customercode。 但在工作人员的情况下,customercode被禁止,没有规则必须应用。

怎么做?

Answer 1:

我能想到的两种方式,或那些的组合。 两者都需要一些调整了完美的结果,但他们都还不错:

1)方案:请注意,我有两个字段/属性:文本/下拉在您的控制器:

public function actionScenario()
{
    $model=new ScenarioForm;

    // if it is ajax validation request
    if(isset($_POST['ajax']) && $_POST['ajax']==='scenario-form')
    {
        if($_POST['ScenarioForm']['dropdown'] == 'admin')
            $model->scenario = 'admin';

        echo CActiveForm::validate($model);
        Yii::app()->end();
    }

    // collect user input data
    if(isset($_POST['ScenarioForm']))
    {
        $model->attributes=$_POST['ScenarioForm'];

        if($model->dropdown == 'admin')
            $model->scenario = 'admin';

        // validate user input
        $model->validate();
        //do other stuff
    }
    // display the login form
    $this->render('scenario', array('model'=>$model));
}

正如你所看到的,我检查下拉值是admin; 如果是这样我改变模型的情况下,以“管理员”。 在该模型中的规则,我有这样的:

public function rules()
{
        return array(
                array('dropdown', 'required'),
                array('text', 'required', 'on' => 'admin'),
        );
}

你看,当场景是admin文本时,才需要。 现在,当您在下拉列表管理,以及没有在你的文本字段,并提交表单,你会得到正确的错误。 如果你想瞬间,阿贾克斯反馈,当用户改变下拉列表,你可以在你看来想要这个:

    <?php echo $form->labelEx($model,'dropdown'); ?>
    <?php echo $form->dropDownList($model,'dropdown', array('admin' => 'Admin', 'staff' => 'Staff!')); ?>
    <?php echo $form->error($model,'dropdown', array('afterValidateAttribute' => 'js:function(form, attribute, data, hasError)
    { 
        mSettings = $.fn.yiiactiveform.getSettings(form);
        $.fn.yiiactiveform.updateInput(mSettings.attributes[1], data, form)
    }')); ?>

在误差为下拉第三个参数是包含多个HTML选项,例如asthe回调下拉与AJAX验证后调用的阵列。 通常情况下,当你做AJAX验证(即使你得到所有错误)仅在当前字段被更新。 所以我们在这也为文本字段中的错误应该被更新回调指定。 现在,您将看到当你在下拉列表中(不启动),选择管理员,你得到一个错误。

它并不完美,因为你没有得到你需要很好*的文本字段,你立刻得到警告。 我不知道如果Yiiactiveform有绘图领域的装饰,甚则警告的功能。 但你也许可以扩展它来做到这一点,或者在回调中使用自定义的JS。 如果你只需要正常验证提交后,您还可以在需要的类添加到与自定义JavaScript的文本标签。 我不知道,此刻如果CActiveForm有针对该属性的特殊参数。

2)自定义的验证规则。 类似于一个,虽然你不使用的情况(但仍然在视图中的JS回调)。 相反,你创建的下拉列表中选择自定义的验证规则,并把它放到规则阵列。 当下拉菜单的变化,我们添加一个错误的文本字段。

public function check_dropdown($attribute,$params){
    if($this->$attribute=="admin"){
        $this->addError('text', 'Please enter Text!');

        $this->clearErrors('text');
    }            
}

public function check_text($attribute,$params){
    if($this->$attribute!=""){
            $this->clearErrors('text');
    }
}

在这里,你不需要设置场景控制器。 但你失去所需的规则。 同样的问题在这里也缺少星号。

我可能会用的方式1. go如果你不想彻底的警告,你可能要宣读了JSON的错误信息,检查它是否是正确的,而正确的类适用于文本与标签自定义JavaScript回调函数。



文章来源: Creating rules for a code field if that field is not disabled
标签: php yii