Причина этого, скорее всего, заключается в том, что она не была реализована.
Соответствующими классами являются lib / Model.php и lib / Validations.php
С чисто абстрактной точки зрения вам необходимо отслеживать режим работы между сохранением и созданием. Для этого я создал открытое свойство (public $ validation_mode) в lib / Model.php и установил для этого свойства значение 'create' или 'save' в закрытых методах Model :: insert () и Model :: update () соответственно. Эти значения соответствуют свойству on, которое вы пытаетесь использовать.
Затем в lib / Validations.php я изменил следующие методы:
Validations :: validates_presence_of ()
public function validates_presence_of($attrs)
{
$configuration = array_merge(self::$DEFAULT_VALIDATION_OPTIONS, array('message' => Errors::$DEFAULT_ERROR_MESSAGES['blank'], 'on' => 'save'));
foreach ($attrs as $attr)
{
$options = array_merge($configuration, $attr);
$this->record->add_on_blank($options[0], $options['message'], $options);
}
}
Ошибки :: add_on_blank ()
public function add_on_blank($attribute, $msg, $options = array())
{
if (!$msg)
$msg = self::$DEFAULT_ERROR_MESSAGES['blank'];
if (($value = $this->model->$attribute) === '' || $value === null)
{
if(array_key_exists('on', $options))
{
if($options['on'] == $this->model->validation_mode)
{
$this->add($attribute, $msg);
}
} else {
$this->add($attribute, $msg);
}
}
}
То, что это делает в основном, передает ВСЕ опции $, указанные в вашей модели (включая свойство 'on'), в метод Errors :: add_on_blank (), где у него теперь достаточно информации, чтобы различать 'on' => ' создать 'и по умолчанию (' on '=>' сохранить '). Используя открытое свойство $ validation_mode из класса Model ($ this-> model-> validation_mode), мы можем определить текущий режим работы и хотим ли мы продолжать добавлять сообщение об ошибке или пропустить его на этот раз.
Очевидно, что вы захотите задокументировать любые внесенные вами изменения и тщательно протестировать их. Согласно документации, все методы валидации предположительно поддерживают эту «общую опцию» на стороне allow_null, allow_blank, но опять же, если она не реализована, вам придется сделать это самостоятельно, внеся эти необходимые изменения.