проверка cakePHP вообще не работает

1

торт версии 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]

У кого-нибудь есть решение для этого, любая помощь будет оценена! Благодарю!

  • 0
    Есть ли причина, по которой вы используете нестандартные имена полей? Не уверен, что это может иметь какое-либо отношение к этому, но - что-то, чтобы рассмотреть.
  • 0
    @drmonkeyninja Ваш ответ, по сути, может быть правильным, так как notBlank был впервые представлен в 2.7, а OP не указывал используемую версию. При этом, OP, пожалуйста, всегда указывайте точную версию CakePHP, которую вы используете!
Показать ещё 6 комментариев
Теги:
sql-server
cakephp
cakephp-2.0
cakephp-2.1

1 ответ

2
Лучший ответ

Если вы не определили его в другом месте, правило 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.

  • 0
    notEmpty устарела. notBlank - это правильно: book.cakephp.org/2.0/en/models/…
  • 0
    @Dave OP использует версию старше 2.7, поэтому мой ответ по-прежнему актуален. Я обновил его, чтобы сделать его более понятным.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню