Как я могу предотвратить проверку полей CakePHP не в $ fieldList?

Я использую CakePHP2.7.5 и мою модель save функция не работает, потому что она пытается проверить поля, которые не указаны в $fieldList параметр.

Согласно Поваренная книга, save метод занимает $fieldList в качестве третьего параметра, чтобы ограничить сохраненные поля теми, которые перечислены в $fieldList,

Model::save(array $data = null, boolean $validate = true, array $fieldList = array())

Я звоню save в модели вот так:

$this->save($data, true, ['name', 'place']);

$ data выглядит так:

[ 'ModelName' => [ 'id' => $id, 'name' => 'abcdef', 'place' => 'ghijklmn' ] ]

но это не удается, потому что ошибки проверки происходят для обязательных полей, которые не представлены в $data, Это должно работать таким образом?

Должен ли я положить некоторые фиктивные данные в $data для обязательных полей?

-1

Решение

Вам, вероятно, нужно установить требуется false в правиле проверки:

public $validate = array(
'description' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'required' => false,
'message' => 'You have to enter a valid description'
)
);

}

Проверка CakePHP 2.x: «требуется»

0

Другие решения

Я нашел ответ сам. В торт Model::save функция, второй параметр $validate может быть массивом, и эта проблема возникает только тогда, когда это массив. (так, мой пример в вопросе выше не был точным.)

Таким образом, этот должен работать как задумано (проверяет и сохраняет только «имя» и «место»),

$this->save($data, true, ['name', 'place']);

но это не так,

$this->save($data, ['validate' => true], ['name', 'place']);

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

$this->save($data, ['validate' => true, 'atomic' => false], ['name', 'place']);

В моем случае это решение.

$this->save($data, ['validate' => true, 'atomic' => false, 'fieldList' => ['name', 'place']);
0

По вопросам рекламы [email protected]