【问题标题】:yii2 conditional validation is not working serverside?yii2 条件验证在服务器端不起作用?
【发布时间】:2017-05-05 07:05:42
【问题描述】:

我在表单中使用用户名字段,我设置如下规则。

['username', 'required','when' => function($model) {
            return $model->pin == true;
        }],

(即)当属性引脚变为真时,只有我需要用户名字段,所有在客户端都工作正常,但在服务器端验证失败,我的代码有什么问题。

更新:

控制器代码

public function actionTest()
{
    $model = new Test();
    if ($model->load(Yii::$app->request->post()) && $model->customValidation()) {
        if($model->validate())
        {
            //
        }
    } 
    return $this->render('testView', [
    'model' => $model,
    ]);
}

型号

public $username;
public $pin = false;
public function rules()
{
 return [
    ['username', 'required','message' => 'You must enter username','when'      => function($model) {
        return $model->pin == true;
    }],
];
}
public function customValidation()
{
if()
{
    $this->pin = true;
    return false;
}
else
{
    return true;
}
}

查看

if($model->pin)
{
<?= $form->field($model, 'username')->textInput(); ?>
}

【问题讨论】:

  • 你确定它在服务器端失败了吗?而不是在客户端?它的编写方式表明它不应该在客户端工作。
  • 是的,当我打开 firebug 并更改字段 id 时它不起作用
  • 您的customValidation() 方法有效吗?空if () 以错误结尾...
  • 不,它不是空的,有一些验证,抱歉不便
  • 所以...也许它不起作用,因为customValidation() 返回false?在这种情况下,根本不会调用 $model-&gt;validate()

标签: validation yii yii2 yii2-advanced-app rule


【解决方案1】:

您需要添加whenClient 才能在客户端工作:

[
    'username', 'required', 
    'when' => function ($model) {
        return $model->pin == true;
    },
    'whenClient' => "function (attribute, value) {
        // JS condition here
    }"
],

其中 JS 条件取决于你得到的 DOM 结构。例如,如果 pin 属性被 id pin 选中,这可以是:

'whenClient' => "function (attribute, value) {
    return $('#pin').is(':checked');
}"

更新:
如果您只是在模型中设置 pin 属性,您可以像这样修改验证规则:

public function rules()
{
    $rules = [
        // other validation rules
    ];
    if ($this->pin) {
        $rules[] = ['username', 'required'];
    }
    return $rules;
}

【讨论】:

  • 感谢您的回答,但问题是属性引脚不在表单字段中,它仅在模型内部使用
  • 是动态改变还是在模型中设置后传递给视图?
  • 我是第一次像 public $pin = false; 一样初始化;
  • 在调用某个函数后它变为真
  • 查看我的更新。如果您不再一一透露正确答案所需的信息,那会容易得多。
猜你喜欢
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多