【问题标题】:Custom Form validation in CakePHPCakePHP 中的自定义表单验证
【发布时间】:2009-07-15 08:39:39
【问题描述】:

这是我的表单:我想确保至少填写其中一个姓名/电子邮件对,因此我正在我的模型中处理自定义验证规则。

alt text http://files.getdropbox.com/u/240752/formfields.png

我最初认为这将是一个简单的案例,将名字/电子邮件对设为必填项,但如果有人填写第三个字段并省略电子邮件,则这不会涵盖其他字段。

另外,如果填写了相应的朋友字段,我只需要检查一个有效的电子邮件地址。

我是不是想多了?我认为我需要在规则之间进行某种交互,但我被卡住了。

【问题讨论】:

    标签: validation forms cakephp


    【解决方案1】:

    【讨论】:

    • 嗨,dhofstet。我在发布之前通读了该部分,但这只是演示了如何为一个特定字段编写规则。我需要 1) 检查是否填充了朋友 2) 如果检查相应的电子邮件字段是否已填充且有效。
    • 是的,您为一个特定字段定义了一个规则,但是,使用 $this->data 您可以从您的验证方法中访问所有数据。所以字段名只是用来触发验证方法。
    • 就 dhofstet 而言,您可以创建一个自定义验证方法来遍历您的 $this->data['Friend'][]['name'] 数组并执行必要的操作(返回 false 是电子邮件丢失等)
    【解决方案2】:

    将您的验证逻辑放在 beforeValidate 回调中。

    【讨论】:

    • 我可以看到在每次验证之前如何调用它,但我很难看到这对我的具体情况有何帮助。
    【解决方案3】:

    您的字段是如何生成的?我假设你正在使用类似的东西:

    <?php echo $form->input('Friend.name'); ?> [html stuff] <?php echo $form->input('Friend.email'); ?>
    

    由于在一个页面内多次这样做会产生重复的 ID(例如,“FriendName”将是由&lt;?php echo $form-&gt;input('Friend.name'); ?&gt; 生成的每个字段的结果 ID),您可能需要添加一个数字生成它们时的每个字段名称,然后在控制器中循环 $this-&gt;data['Friend'] 并在找到它们时使违规字段无效(如果名称存在,但电子邮件不存在,如您所说)。

    我认为 cake 没有内置的方法来处理这种情况,但我以前错了!

    【讨论】:

    • 嗨 inkedmn,我是这样生成字段的:pastebin.com/m44277054 如您所见,它们被命名为 data[Friend][0][name] 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    相关资源
    最近更新 更多