Описание

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

Код рестрикшенов лежит в папке ~/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()
  • getList()
  • add()
  • validate()
  • getErrorMessage()
  • getTitle()
  • getClassName()
  • getId()
  • getFieldTypeId()
  • find()
  • normalizeIn()
  • normalizeOut()