【问题标题】:CakePHP: Getting Validation errors for nonexistant fieldsCakePHP:获取不存在字段的验证错误
【发布时间】:2014-10-28 14:53:48
【问题描述】:

我在 CakePHP 中遇到了一些奇怪的问题。 我正在尝试将从表单获得的数据保存到模型Booking。一些联系数据,一条消息,一个电话号码和一个电子邮件地址,标准的东西。数据已发布,我正在尝试通过

保存它
$this->Booking->save ($this->request->data);

但当我尝试保存时,有两个字段未通过验证并停止保存过程: phone_buyercarsign

奇怪的是,这两个字段不是我要保存的表单的一部分。正如预期的那样,它们没有出现在$this->data 中:

$this->request->数据:

    array(
    'Booking' => array(
        'question' => 'Lieber Vermieter,
ich würde gerne im angegebenen Zeitraum auf deinem Parkplatz parken. Ist das möglich? Ich freue mich auf deine Rückmeldung.
Liebe Grüße',
        'start_date' => '30.10.2014',
        'end_date' => '30.10.2014',
        'sellerid' => '294',
        'buyerid' => '301',
        'parkid' => '10468',
        'status' => 'Angebot',
        'answer' => 'Blserntesn7x6 u fcgt c c ',
        'ppemail_seller' => '*email*',
        'phone_seller' => '0532732123',
        'acceptrules' => '1',
        'acceptrules2' => '1',
        'id' => '1012'
    )
)

...它们也不是我提交的表单的一部分。它们甚至不在页面上的任何其他形式。然而,它们确实作为数据库中的字段存在,并且在模型中具有验证规则:

Booking.php(模型):

class Booking extends AppModel {

public $validate = array(

        //(...)
        'phone_seller' => array (
            'rule' => array ('notEmpty'),
            'message' => 'Damit dich der Mieter kontaktieren kann, brauchst du eine Telefonnummer.'
        ), 
        'ppemail_seller' => array (
            'rule' => array ('notEmpty'),
            'message' => 'Um das Geld der Miete zu empfangen, benötigst du ein PayPal-Konto.'
        ),

        // These two are giving me headaches:
        'carsign' => array( 
            'required' => array(   
                'rule' => array('notEmpty'), 
                'required' => false,
                'message' => 'Du brauchst ein Autokennzeichen, um den Parkplatz zu buchen.'
            ) 
        ),
        'phone_buyer' => array( 
            'required' => array( 
                'rule' => array('notEmpty'), 
                'required' => false,
                'message' => 'Damit dich der Vermieter kontaktieren kann, brauchst du eine Telefonnummer.'
            ) 
        )

);

}

但是根据我到目前为止阅读的文档,如果相应的字段不是提交表单的一部分,则规则 notEmpty 不应该做任何事情。可以肯定的是,我添加了required=>false,但他们仍然向我抛出错误。 我会很高兴得到任何帮助,提前谢谢你。 :) 对不起,如果有些事情难以理解,英语不是我的母语。

更新:

感谢您的建议,我找到了问题所在。我在下面的答案中写了它。

【问题讨论】:

  • 那么你在哪里设置phone_buyercarsign;您是否在控制器操作中设置了它,并且您希望在出现问题时停止保存;
  • phone_buyercarsign 在另一个操作中设置,不会出现在此控制器操作或视图中。保存失败,因为模型尝试保存这些没有值的字段。

标签: php forms validation cakephp cakephp-2.2


【解决方案1】:

我发现了问题。

问题是在保存之前的某些代码中,$this->Booking->read(); 已用于获取数据库的内容。由于该函数覆盖了模型中的数据(据我所知here),我试图保存的数据丢失并被数据库的内容(其中缺少这些特定字段)替换。我用$this->Booking->findById($id); 替换了函数,一切正常。

【讨论】:

    【解决方案2】:

    您是否尝试过使用'allowEmpty' 键?

    'phone_buyer' => array( 
        'required' => false,
        'allowEmpty' => false,
        'message' => 'Damit dich der Vermieter...'
    )
    

    【讨论】:

    • 我做到了,但是虽然它解决了这个问题,但它给了我一个问题,即这些字段现在可以接受空值,这是我不想要的:这些字段在其他页面上是强制性的。
    • 另一条规则将字段设置为notEmpty,这意味着如果字段为空则不会被接受,而allowEmpty 会这样做。
    • 当然,它需要设置为 false :) 更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多