我在表单中使用用户名字段,我设置如下规则。
['username', 'required','when' => function($model) {
return $model->pin == true;
}],
(即)当属性引脚变为真时那时我只需要用户名字段,所有在客户端都正常工作,但是在服务器端验证falis,我的代码出了什么问题。
更新:
控制器代码
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(); ?>
}
答案 0 :(得分:3)
您需要添加whenClient
才能在客户端工作:
[
'username', 'required',
'when' => function ($model) {
return $model->pin == true;
},
'whenClient' => "function (attribute, value) {
// JS condition here
}"
],
其中JS条件取决于您获得的DOM结构。例如,如果pin属性的复选框标识为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;
}