简体   繁体   中英

CakePHP validation always true

I've been struggling with this for the last hour or so, wondering if some fresh eyes can help.

Model

class User extends AppModel {
public $name = 'User';
public $validate = array(
    'email' => array(
        'valid' => array(
            'rule' => 'email',
            'message' => 'The email is not valid'
        ),
        'required' => array(
            'rule' => 'notEmpty',
            'message' => 'Please enter an email'
        )
    )
);
}

Controller

class UserController extends AppController {

var $uses = array('User');

function index(){
    $users = $this->User->find('all');
    $this->set(compact('users'));
}

public function add() {
    $this->set('title_for_layout', 'Add new user');

    if(isset($this->data) && !empty($this->data)) {
        $this->User->set($this->data);
        $this->log($this->User->invalidFields(), "debug");

        if($this->User->validates()){
            if ($this->User->save($this->data)) {

                $this->Session->setFlash("Added " . $this->data['User']['name']);
                $this->redirect('index');
            }
        } else {
            $this->Session->setFlash('There are errors with your form submit, please see below.');
        }

    }
}

}

View

<?php
    echo $this->Form->create('User'); 
    echo $this->Form->input('name', array('label' => 'Name'));
    echo "<div class='clear'></div>";
    echo $this->Form->input('email', array('label' => 'Email'));
    echo "<div class='clear'></div>";
    echo $this->Form->button('Reset', array('type' => 'reset'));
    echo $this->Form->button('Add Useer', array('type' => 'submit'));
    echo $this->Form->end(); 
?>

But I never get invalid fields for email? Have I missed something glaring?

If it makes any difference, this is a plugin Im developing so it doesnt sit directly in app/ but in app/Plugins

Thanks

EDIT: So I've been struggling with this for a while now, and still no joy. One thing I have noticed though, when I print out the model details (using var_dump($this->User) ), the [validate] array is empty. For example:

[validate] => Array
    (
    )

[validationErrors] => Array
    (
    )

Im presuming this is what the issue is, even though I have declared my $validate array, its somehow being overwritten? Anyone come across this before? Any solutions?

public $validate = array(
    'email' => array(
        'valid' => array(
            'rule' => array('email'),
            'message' => 'The email is not valid'
        ),
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'Please enter an email',
            'allowEmpty' => false
        )
    )
);

Try adding rules as array and adding 'allowEmpty' key set to false on the required validation.

Damn! So simple. If I read the cookbook properly at http://book.cakephp.org/1.3/en/view/1114/Plugin-Models it would have told me that

If you need to reference a model within your plugin, you need to include the plugin name with the model name, separated with a dot.

Thus..

var $uses = array('Plugin.User');

works.. Hope this helps someone else!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM