Проблема проверки модели в Cakephp - PullRequest
1 голос
/ 30 июня 2010

Я пытаюсь реализовать проверку формы с использованием моделей CakePHP. Вот мои фрагменты кода ...

Модель

// File: /app/models/enquiry.php
class Enquiry extends AppModel {
    var $name = "Enquiry";
    var $useTable = false;
    var $_schema = array(
        "name"      => array( "type" => "string", "length" => 100 ), 
        "phone"     => array( "type" => "string", "length" => 30 ), 
        "email"     => array( "type" => "string", "length" => 255 )
    );
    var $validate = array(
        "name"  => array(
            "rule" => array( "minLength" => 1 ),
            "message" => "Name is required"
        ),
        "email" => array(
            "emailFormat" => array( "rule" => "notEmpty", "last" => true, "message" => "Email is required" ),
            "emailNeeded" => array( "rule" => array( "email", true ), "message" => "Must be a valid email address" )
        )
    );
}

Действие контроллера

// /app/controllers/nodes_controller.php
class NodesController extends AppController {

    var $name = "Nodes";
    var $uses = array( "Enquiry" );
    function enquire() {
        if ( $this->data ) {
        $this->Enquiry->set( $this->data );
        $this->Enquiry->set( "data", $this->data );
        if ( $this->Enquiry->validates(
                array( "fieldList" => array("name", "email") )
            ) ) {
            // .....
            }
        }
    }
}

Посмотреть ....

// /app/views/nodes/enquire.ctp
<?php echo $form->create("Node", array("action" => "ask")); ?>
<?php echo $form->input( "name", array( "label" => "Name" ) ); ?>
<?php echo $form->input( "email", array( "label" => "Email" ) ); ?>
<?php echo $form->input( "phone", array( "label" => "Phone" ) ); ?>
<?php echo $form->end("Send");?>

Моя проблема : При отправке форма никогда не проверяется. Функция validate возвращает true каждый раз, даже если я ничего не ввожу в форму.

Что я делаю не так?

Привет

Ответы [ 2 ]

1 голос
/ 30 июня 2010

Поскольку у вас есть только два правила проверки, нет смысла перечислять эти два поля для проверки в validates(). Попробуйте так:

function enquire(){
    if($this->data){
        $this->Enquiry->set( this->data);
        if($this->Enquiry->validates()){
            // it validated logic
        }else{
            // didn't validate logic
        }
    }
}

Ваш массив проверки должен быть (следуйте последовательности синтаксиса):

var $validate = array(
    'name' => array(
        'notEmpty' => array(
            'rule' => 'notEmpty',
            'message' => 'Name is required'
        )
    ),
    'email' => array(
        'emailFormat' => array(
            'rule' => 'notEmpty',
            'message' => 'Email is required'
        ),
        'emailNeeded' => array(
            'rule' => array('email', true),
            'message' => 'Must be a valid email address'
        )
    )
);
1 голос
/ 30 июня 2010

Я думаю, что вы передали неверные данные в валидаторы.Установив $this->data я бы просто позвонил

$this->Model->validates();
// or
$this->Model->validates($this->data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...