торт версии 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"
)
);
Cake дает вам сообщение об ошибке preg_match(): Delimiter must not be alphanumeric or backslash
notBlank
потому что notBlank
не является определенным правилом в вашем приложении, поэтому рассматривает его как правило обычного регулярного выражения.
Как говорит Дэйв в своем комментарии к CakePHP 2. 7+ вы должны использовать notBlank
.
notEmpty
устарела. notBlank
- это правильно: book.cakephp.org/2.0/en/models/…
notBlank
был впервые представлен в 2.7, а OP не указывал используемую версию. При этом, OP, пожалуйста, всегда указывайте точную версию CakePHP, которую вы используете!