cakeHP-form-如果选中复选框,则显示并验证另一个字段


cakePHP - form - if checkbox is selected show and validate another field

是否可以让cakeHP处理输入字段的依赖关系?

echo $this->Form->checkbox('foo');
echo $this->Form->input('bar'); //is hidden initially

如果勾选了foo,只显示并验证bar?

必要的jQuery(您需要为代码更新类,因为您实际上还没有输入真实名称)。最初你会想要用CSS隐藏栏。

(function(){
    $('#foo').on('change', function() {
        if($(this).is(':checked')) {
            $('#bar').fadeIn();
        }
    });
});

最好的方法是使用javascript,记住CakePHP只是为侧服务器生成PHP代码

<script >
$(document).ready(function(){
$('#MyModelFoo').change(function(){
 if($(this).is(':checked')) {
        $('#MyModelBar').fadeIn();
    }
});
</script>
<?php
echo $this->Form->create('MyModel');
echo $this->Form->checkbox('foo');
echo $this->Form->input('bar'); //is hidden initially
echo $this->Form->end();
?>

是的,但为此您需要使用客户端编程,因为php无法执行这样的显示隐藏。。jQuery是最好的。。。在cakepp中,已经有一个功能可以检查这种依赖关系,如果我没有错的话,它被称为observeField,因为cakepp默认使用prototype js。

了解更多

使用JavaScript。CakePHP是用服务器端编程语言编写的,您不能动态地隐藏/显示输入字段。

其他人发布了显示/隐藏字段所需的jQuery,下面是如何在CakePHP:中验证它

在AppModel中:

public function requiredIfChecked($check, $associatedField) {
    $value = array_pop($check);
    if ($this->data[$this->alias][$associatedField] && empty($value)) {
        return false;
    }
    else {
        return true;
    }
}

在您的验证阵列中:

public $validate = array( 
    'bar'=>array(
        'required_if_checked'=>array(
            'rule'=>array('requiredIfChecked', 'foo'),
            'message'=>'cannot be blank if foo is checked'
        )
    )
);