baseRestriction

Описание

Рестрикшены представляют из себя набор классов по валидации и модификации значений полей объектов в зависимости от их функционального назначения.

Код рестрикшенов лежит в папке ~/classes/system/subsystems/models/data/restrictions. Каждый рестрикшен имеет строковой идентификатор (classPrefix), который используется для связывания полей с соответствующим классом. Файлы, содержащие код рестрикшенов именуются по строковому идентификатору: “classPrefix.php”. Класс именуется как “classPrefixRestriction” и наследуется от класса “baseRestriction”.

Примеры использования

Рассмотрим реализацию рестрикшена “E-mail”, который идет в поставке. Рестрикшен “e-mail” используется для проверки корректности ввода строковых полей, содержащих e-mail.

По умолчанию этот файл располагается по адресу: ~/classes/system/subsystems/models/data/restrictions/email.php

<?php
  class emailRestriction extends baseRestriction {
    protected $errorMessage = 'restriction-error-email';

    public function validate($value, $objectId = false) {
      return (bool) ($value ? preg_match("/.+\@.+\..+/", $value) : true);
    }
  };
?>

При попытке изменить значение для, которому назначен этот рестрикшен, будет происходить следующее:

  1. Будет создан экземпляр класса emailRestriction

  2. Вызван метод validate(…), в который в качестве аргумента будет передано новое значение

    • Если значение валидируется регулярным выражением, то метод возвращает true и новое значение сохраняется в базу данных

    • Если новое значение не соответствует регулярному выражению, возвращается false, из файла i18n берется описание ошибки по ее коду ($errorMessage) и пользователю показывается сообщение с этой ошибкой

  • get() — Получает экземпляр рестрикшена по его id
  • getList() — Получает список всех возможных рестрикшенов
  • add() — Добавить новый рестрикшен для определенного типа полей
  • validate() — Провалидировать значение поля, за которым закреплен рестрикшен
  • getErrorMessage() — Получить текст ошибки, который будет выведен пользователю в случае, если рестрикшен не провалидировался
  • getTitle() — Получить название рестрикшена
  • getClassName() — Получить строковой идентификатор рестрикшена
  • getId() — Получить id рестрикшена
  • getFieldTypeId() — получить id типа поля
  • find() — Получить экземпляр рестрикэшна $classPrefix для типа полей $fieldTypeId, если такой существует
  • normalizeIn() — Преобразовать значение поля перед сохранением в базу
  • normalizeOut() — Преобразовать значение поля после загрузки из базы