Дополнительные возможности
MV позволяет делать дополнительную обработку данных внутри методов ядра. Для этого необходимо перегрузить методы модели.
Дополнительная валидация данных в модели
Допустим необходимо вносить данные в формате процентов '12%'. Нам необходимо проверить введенные данные на соответствие шаблону регулярного выражения.
class Discount extends Model
{
protected $name = 'Скидки';
protected $name_field = 'amount';
protected $model_elements = [
['Активация', 'bool', 'active', ['on_create' => true]],
['Величина скидки, %', 'char', 'amount', [
'required' => true,
'help_text' => 'пример 10%, 17%, 30%']],
['Сумма, от', 'int', 'summ_from', ['required' => true]],
['Сумма, до', 'int', 'summ_to', ['zero_allowed' => false]]
];
public function validate()
{
$amount = $this -> elements['amount'] -> getValue();
if($amount && !preg_match('/^[1-9]d?%$/', $amount))
$this -> errors[] = 'Величина скидки должна быть задана целым числом с % на конце.';
return parent :: validate();
}
}
Получение и изменение значений полей модели
Из объекта модели можно получить свойства ее полей, а также установить полям новые свойства.
- getFieldProperty($field, $property) - получить значение свойства $property поля $field
- setFieldProperty($field, $property, $value) - установить значение равное $value свойства $property поля $field
$value = $mv -> discount -> getFieldProperty('summ_to', 'zero_allowed');
if( ... )
$mv -> discount -> setFieldProperty('summ_to', 'zero_allowed', true);
Форматирование полей в таблице
При выводе таблицы записей модели в административной панели, значения поле могут быть изменены нужным образом. Для этого в модели может быть добавлен специальный метод, который может преобразовывать значения полей для таблицы.
- processAdminModelTableFields($name, $row) - где $name - название поля, $row - массив значений всех полей записи, включая id.
class Stock extends Model
{
...
//Добавляем метод в модель и в колонке с весами рядом со значениями будут стоять 'кг'
public function processAdminModelTableFields($name, $row)
{
if($name === 'weight' && $row['weight'] > 0)
return $row['weight'].' кг';
}
}
Предыдущий раздел
Управление простыми моделями