Проверка CakePHP без модели с двумерным массивом - PullRequest
1 голос
/ 02 августа 2011

Используя CakePHP 1.3, как я могу использовать встроенную проверку для проверки формы, которая генерирует двумерный массив, настроенный следующим образом, и только модель для «Бронирование».Для этого примера, давайте предположим, что мне нужно только убедиться, что они необходимы:

[Booking] => Array
        (
            [id] => 10000141
            [terms] => 1
        )

[Member] => Array
        (
            [name] => Test Name
            [billing_address] => 1234 Park Lane
            [billing_city] => New York
            [billing_zip] => 10001
            [billing_state] => NY
            [billing_country] => US
        )

[Order] => Array
        (
            [theTotal] => 21.64
            [currencyCode] => USD
        )

[CreditCard] => Array
        (
            [card_number] => 1234567890
        )

Я понимаю, как использовать Множественные наборы проверки , но так как у меня нет модели для«Участник», «Заказ», «Кредитная карта», как я могу проверить информацию?

Причина, по которой эта форма является многомерной с моделью, заключается в том, что я отправляю данные в PayPal для обработки и не сохраняюинформация, кроме бронирования.

Ответы [ 3 ]

1 голос
/ 02 августа 2011

Контроллер

CakePHP передает свойство validationErrors каждой загруженной модели в класс View (а затем в класс FormHelper), чтобы могли отображаться ошибки проверки. Так как метод Controller::render() проверяет, загружена ли каждая модель , единственный способ действительно добиться этого с контроллера (без расширения метода render()) - это создавать необходимые модели на лету :

public function add() {
    // ...
    $this->Member = new Model(null, false); // make fake model with no table
    $this->modelNames[] = 'Member'; // add to list of models
    // perform validation
    if (!Validation::minLength($this->data['Member']['name'], 1)) {
        $this->Member->validationErrors['name'] = 'Please enter you name';
    }
    // ...
}

Редактировать

Если под «торт-стандартом» вы подразумеваете, что хотите использовать массив Model::validate, это также возможно:

public function add() {
    // ...
    $this->Member = new Model(null, false); // make fake model with no table
    $this->modelNames[] = 'Member'; // add to list of models
    // perform validation
    $this->Member->validate = array(
        'name' => array(
            array(
                'rule' => array('minLength', 5),
                'message' => 'Your full name must be at least five characters in length'
            ),
        ),
    );
    $this->Member->set($this->data);
    $this->Member->validates();
}
1 голос
/ 02 августа 2011

Представление

Поскольку CakePHP ожидает увидеть реальные модели перед передачей ошибок проверки в представление, вы также можете просто сделать это вручную, чтобы упростить задачу:

public function add() {
    // perform validation
    if (!Validation::minLength($this->data['Member']['name'], 1)) {
        $validationErrors['Member']['name'] = 'Please enter you name';
    }
    // etc ...
    $this->set(compact('validationErrors')); // pass to view
}

По вашему мнению,Вы можете установить это в FormHelper вручную:

<?php $this->Form->validationErrors = $validationErrors; ?>
1 голос
/ 02 августа 2011

Модель

Проверка, которую вы проводите, является функцией Модели класса . Я бы лично создал модели для каждого из вышеперечисленных, включая ваш массив $validates, но установив для свойства $useTable значение false, чтобы оно не взаимодействовало с вашей базой данных. Это должно позволить вам использовать функции из модели, такие как проверка, в таких местах, как ваши контроллеры .

...