торт версия 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]
У кого-нибудь есть решение для этого, любая помощь будет оценена!
Спасибо!
Если вы не определили это в другом месте правило notBlank
должно быть notEmpty
чтобы сделать поле обязательным (для CakePHP ниже 2.7, как в вашем случае): —
public $validate = array(
"NameOnCheck" => array(
"rule" => "notEmpty")
);
Торт дает вам сообщение об ошибке preg_match(): Delimiter must not be alphanumeric or backslash
так как notBlank
не является определенным правилом в вашем приложении, поэтому рассматривает его как пользовательское правило регулярного выражения.
Как говорит Дейв в своем комментарии к CakePHP 2.7+, вы должны использовать notBlank
,
Других решений пока нет …