CakePHP при использовании $ model-> save () проверяет правила и пропускает другие правила - PullRequest
0 голосов
/ 12 февраля 2012

Я использую CakePHP 2.0, и у меня есть модель, на которой я использую проверку, например:

 var $validate = array(
    'title' => array(
        'unique_rule'=>array(
            'rule' => 'isUnique',
            'on' => 'create',
            'message' => 'This title has already been taken.'
        ),
        'required_rule'=>array(
            'required' => true,
            'allowEmpty' => false,
            'message' => 'The title field is required.'
        )
    )
 );

, а в контроллере у меня есть действие редактирования, и я использую $ model-> save(), чтобы сохранить дату из $ this-> request-> data, но она не соответствует правилу проверки isUnique, хотя это не вставка новой записи.Есть ли способ указать, что это существующая запись, а не новая?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Если я правильно понял вопрос, вы должны установить идентификатор модели перед вызовом $model->save();, чтобы cakephp знал, что это обновление.

См. http://book.cakephp.org/2.0/en/models/saving-your-data.html:

"Создание или обновление контролируется полем идентификатора модели. Если задано $ Model-> id, запись с этим первичным ключом обновляется. В противном случае создается новая запись:"

<?php
// Create: id isn't set or is null
$this->Recipe->create();
$this->Recipe->save($this->request->data);

// Update: id is set to a numerical value
$this->Recipe->id = 2;
$this->Recipe->save($this->request->data);
0 голосов
/ 02 мая 2013

ваш массив проверки неверен, вы не установили правило для 'required_rule', которое может вызвать сообщение об ошибке isUnique.

var $validate = array(
'title' => array(
    'unique_rule'=>array(
        'rule' => 'isUnique',
        'on' => 'create',
        'message' => 'This title has already been taken.',
        'last' => true
    ),
    'required_rule'=>array(
       'rule' => array('notEmpty'),             
        'message' => 'The title field is required.'
    )
)
);

Также помните, что использование required=>true НЕ приведет к проверке фактических данных, оно только хочет, чтобы поле присутствовало в массиве данных, и "" также считается присутствующим

...