【问题标题】:cakePHP validation not working at allcakePHP 验证根本不起作用
【发布时间】:2015-08-24 15:57:56
【问题描述】:

蛋糕 2.0 版

我正在做一个 cakePHP 项目,但我无法让验证功能正常工作。

我通过订单控制器向支付表(模型)提交数据。

这是视图

echo $this->Form->create("Payment",array("class"=>"payment"));
    echo $this->Form->input("Payment.PaymentID");
    echo $this->Form->input("Payment.OrderID",array("value"=>$order["Order"]["OrderID"],"type"=>"hidden"));
    echo $this->Form->input("Payment.UserID",array("type"=>"hidden","value"=>$loggedInUserID));
    echo $this->Form->input("Payment.TransactionTypeID",array("class"=>"transaction","options"=>$transactions,"label"=>"Transaction Type","empty"=>"Select Transaction Type"));

    echo $this->Html->div("transactionType Phone");
        echo $this->Form->input("Payment.NameOnCheck",array("class"=>"CheckBy Phone"));
        echo $this->Form->input("Payment.CheckRoutingNumber");
        echo $this->Form->input("Payment.CheckAccountNumber");  
    echo "</div>";

    echo $this->Html->div("transactionType CreditCard clearfix");
        echo $this->Form->input("Payment.CreditCardNumber",array("label"=>"Card Number"));
        echo $this->Form->input("CreditCardExpirationMonth",array("label"=>"Expiration Date","options"=>$months));
        echo $this->Form->input("CreditCardExpirationYear",array("label"=>" ","options"=>$years));
        echo $this->Form->input("Payment.CreditCardExpirationDate",array("type"=>"hidden"));
        echo $this->Form->input("Payment.CreditCardCVV",array("label"=>"CVV (not required)","class"=>"noCharge"));
        echo $this->Form->input("Payment.CreditCardStreet",array("label"=>"Street Address on Card (not required)","class"=>"noCharge"));
        echo $this->Form->input("Payment.CreditCardZipCode",array("Zip Code","class"=>"noCharge"));
    echo "</div>";

    echo $this->Html->div("transactionType AmountPaid clearfix");
        echo $this->Form->input("Payment.PaymentAmount",array("label"=>"Amount Paid"));
        echo $this->Form->input("Pay In Full",array("type"=>"button","label"=>" "));
    echo "</div>";

    echo $this->Html->div("transactionType RefundAmount");
        echo $this->Form->input("RefundAmount",array("label"=>"Amount To Refund"));
    echo "</div>";



echo $this->Form->end("Complete Transaction");

控制器

 $this->Order->Payment->set($this->request->data);
        if($this->request->is("post") || $this->request->is("put")) {



            if($this->Order->Payment->save($this->request->data)){
                $this->Session->setFlash("Payment Added");
               //$this->redirect("add_payment/$id");
            }

        }

支付模式

class Payment extends AppModel{
public $useTable = "Payment";
public $primaryKey = "PaymentID";
public $belongsTo = array(
    "TransactionType"=>array(
        "foreignKey"=>"TransactionTypeID"
    )
);
    public $validate = array(
        "NameOnCheck" => array(
            "rule" => "notBlank"
        )
    );

其中一个问题是,每当我在 NameOnCheck 字段中提交带有数据的表单时,它都会给我一个错误,说它是空白的。

它也没有考虑到我设置的所有验证。当我对 CheckRoutingNumber 的长度进行验证时,它只是忽略它,只给我一个 NameOnCheck 错误(无论是否填写)。

我也在顶部收到此警告,两次:

preg_match():分隔符不能是字母数字或反斜杠 [CORE/Cake/Model/Model.php,第 3198 行]

有没有人有解决方案,任何帮助将不胜感激! 谢谢!

【问题讨论】:

  • 您使用非标准字段名称是否有原因?不确定这是否与它有关,但是 - 需要调查。
  • @drmonkeyninja 你的回答可能基本上是正确的,因为notBlank 是在 2.7 中首次引入的,并且 OP 没有指定使用的版本。话虽如此,OP,请始终提及您正在使用的确切 CakePHP 版本!
  • @ndm 我相信是 2.0 版,
  • @drmonkeyninja 非标准字段名称是什么意思?您是指符合蛋糕约定的字段名称吗?我正在做一个已经开始的项目
  • 2.0 只是一个分支,确切的版本号是x.x.x 格式,例如可以在lib\Cake\VERSION.txt 中找到。还有第一条评论来自@Dave,我刚刚添加了 drmonkeyninja,因为他发布了一个答案,但删除了它;)

标签: php sql-server cakephp cakephp-2.0 cakephp-2.1


【解决方案1】:

除非您在其他地方定义了它,否则规则 notBlank 应该是 notEmpty 以使字段成为必需(对于您的情况,CakePHP 低于 2.7):-

public $validate = array(
    "NameOnCheck" => array(
        "rule" => "notEmpty"
    )
);

Cake 向您提供错误消息 preg_match(): Delimiter must not be alphanumeric or backslash,因为 notBlank 不是您应用中定义的规则,因此将其视为自定义正则表达式规则。

正如 Dave 在他对 CakePHP 2.7+ 的评论中所说,您应该使用 notBlank

【讨论】:

  • notEmpty 已弃用。 notBlank 正确:book.cakephp.org/2.0/en/models/…
  • @Dave OP 使用的是早于 2.7 的版本,所以我的回答仍然适用。我已对其进行了更新以使其更清晰。
  • @Dave,ndm 感谢你们的帮助,它现在与 notEmpty 一起工作! :)
  • 有谁知道我如何验证某物是否达到一定长度 (9)?范围 (9,9) 和之间不起作用
  • @Anthony 这应该作为一个新问题提出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多