Снова много подобных вопросов, но ни один из них мне не помогает. Проверка формы HTML5, похоже, запускается с сообщениями "Пожалуйста, заполните это поле" вместо сообщений проверки модели, которые должны быть "Пожалуйста, введите модель"

У меня есть форма для добавления компьютеров в базу данных.

Вот моя форма:

echo $this->Form->create('Computer');
echo $this->Form->input('Computer.model', array('label' => 'Model'));
echo $this->Form->input('Computer.memory', array('label' => 'memory'));
echo $this->Form->input('Computer.hdd', array('label' => 'hdd'));
echo $this->Form->input('Computer.price', array('label' => 'price'));    
echo $this->Form->end('Save Computer');

Вот полный код контроллера с индексом и добавлением действий

<?php
class ComputersController extends AppController {

    public $helpers = array('Html', 'Form', 'Session');
    public $components = array('Session');


    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('add');
    }
    public function index() {


        $this->set('computers', $this->Computer->find('all'));

    }

    public function add() {

        if ($this->request->is('post')) {
            if (!empty($this->request->data)) {

                $this->Computer->save($this->request->data);
                $this->Session->setFlash(__('Your Computer has been saved, or so it seems.....'));
                return $this->redirect(array('action' => 'index'));
            }
            $this->Session->setFlash(__('Not sure why we got here 1.'));
        } else {
            $this->Session->setFlash(__('By right, this should be the index page'));


        }

    }

}
?>

Вот модель

<?php
class Computer extends AppModel {


public $validate = array(

    'model' => array(
        'Please enter model name'=> array(
            'rule'=>'notEmpty',
            'message'=>'Please enter model'
        )
    )

);
}

?>

Я прочитал из других форм, что запуск функции сохранения модели, что я делаю, автоматически запускает проверку модели. Как я могу заставить работать валидацию модели?

Спасибо Кевин

0
aDvo 6 Мар 2014 в 08:38

3 ответа

Лучший ответ

$this->{Model}->save() возвращает false, если проверка не удалась, но в вашем случае вы выполняете перенаправление с флэш-сообщением после функции сохранения. так что сначала проверьте, правильно ли сохраняется форма или нет, в случае идеального сохранения затем перенаправьте на страницу со списком, в противном случае визуализируйте файл view с флэш-сообщением, в котором вы можете просмотреть сообщения проверки.

if ($this->Computer->save($this->request->data)) {
    $this->Session->setFlash(__('Your Computer has been saved, or so it seems.....'));
    return $this->redirect(array('action' => 'index'));
} else {
    $this->Session->setFlash(__('Unable to save form'));
}

Примечание . Чтобы отключить проверку HTML, просто выполните

$this->Form->inputDefaults(array(
    'required' => false
)); 

В вашем файле просмотра

Надеюсь, это тебе поможет.

0
Anil kumar 6 Мар 2014 в 09:04

Как вы сказали, если у вас есть проверка notEmpty в модели, CakePHP добавляет required="required" во входные атрибуты. Это обрабатывается браузером, поэтому вы видите сообщение по умолчанию Please enter this field, когда пытаетесь отправить пустое значение. Преимущество заключается в том, что если вы используете браузер на другом языке, сообщение будет отображаться на этом языке.

Если вы хотите изменить это сообщение, вы можете попробовать решение, подобное приведенному в этот вопрос. (вероятно, это не то, что вам нужно)

Если вы хотите удалить это сообщение на стороне клиента, вы можете отключить его с помощью novalidate

echo $this->Form->create('Computer', array('novalidate' => 'novalidate'));

Таким образом, обязательное свойство HTML5 будет проигнорировано, и вы получите сообщение от модели.

Я не уверен, есть ли способ указать Cake использовать значение на стороне сервера на клиенте.

1
Community 23 Май 2017 в 11:49

Установите novalidate => true в параметрах FormHelper :: create ()

echo $ this-> Form-> create ('Компьютер', array ('novalidate' => true));

Для получения дополнительной информации перейдите на http://book.cakephp.org. /2.0/en/core-libraries/helpers/form.html

0
vincentcjl 6 Мар 2014 в 08:59