1

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

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

并且仅在检查 foo 时才显示和验证 bar ?

4

5 回答 5

3

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

(function(){

    $('#foo').on('change', function() {
        if($(this).is(':checked')) {
            $('#bar').fadeIn();
        }
    });
});
于 2013-02-13T12:46:10.617 回答
1

最好的方法是使用 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();
?>
于 2013-02-13T12:57:48.757 回答
0

其他人已经发布了显示/隐藏字段所需的 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'
        )
    )
);
于 2013-02-13T15:08:47.797 回答
0

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

于 2013-02-13T13:01:29.003 回答
0

是的,但是为此你需要使用客户端编程,因为 php 不能这样做 show hide..j 查询是最好的...在 cakephp 中已经有一个功能可以检查这种依赖关系,如果我没记错的话默认情况下,名为 observField as cakephp 使用原型 js。

更多

于 2013-02-13T10:27:36.363 回答