Валидация при записи на стороне сервера

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • dimyy
    Active Community Member
    • Jun 2018
    • 569

    Валидация при записи на стороне сервера

    1. Предусмотрен ли какой нибудь механизм по валидации данных при записи на стороне сервера?
    2. Как вернуть ошибку при валидации со стороны сервера?
  • UnnamedUA
    Senior Member
    • Jun 2014
    • 101

    #2
    Валидация поля?
    Минимум есть Before Save Custom Script

    Comment

    • dimyy
      Active Community Member
      • Jun 2018
      • 569

      #3
      Есть. А как оттуда бросить культурный эксепшн?

      И например при сохранении через АПИ функция тоже отрабатывает? (не пробовал)

      Comment

      • tanya
        Senior Member
        • Jun 2014
        • 4308

        #4
        Не думаю, что отрабатывает. Разве если сохранение непосредственно в базу вернёт ошибку

        Comment

        • dimyy
          Active Community Member
          • Jun 2018
          • 569

          #5
          Есть ли культурный способ вернуть ошибку сохранения в приложение?

          С валидацией проблем нет - доопределяем репозиторий и вставляем проверку, но требуется на клиента вернуть ошибку сохранения как то.

          class Task extends \Espo\Modules\Crm\Repositories\Task
          {

          public function save(Entity $entity, array $options = array())
          {
          $GLOBALS['log']->warning('Сработало!');

          if (Валидировано ) {
          return parent::save($entity, $options);
          } else {

          Вернуть ошибку в приложение!

          }

          }

          }

          Comment

          • dimyy
            Active Community Member
            • Jun 2018
            • 569

            #6
            Продолжение изысканий:

            Во view определяем

            errorHandlerBadStatus

            С сервера отправляем 409 статус со структурой

            {
            "reason" : "BadStatus",
            "data" : "То что хотим сказать"
            }

            Все бы хорошо, но два момента:
            1. В случае апдейта поля а не всей записи отлов 409 не происходит. Очевидно по причине что this в https://github.com/espocrm/espocrm/b...d/base.js#L519
            относится к вью поля, а не к вью записи. Что делать?
            2. Не происходит рефреш как в случае обычной ошибки и на клиенте запись остается отредактированной, хотя должна откатиться. Что делать?

            Comment

            • tanya
              Senior Member
              • Jun 2014
              • 4308

              #7
              Можно было и хуки использовать. в beforeSave если не прошла валидация throw \Error();
              откатить значение поля
              $entity->set($fieldName, $entity->getFetched($fieldName));

              Comment

              • dimyy
                Active Community Member
                • Jun 2018
                • 569

                #8
                Откатить на клиенте - на сервере все хорошо - при выходе через 409 не отрабатывается откат на клиенте.

                resetModelChanges вроде как похоже на правду.

                errorHandlerBadStatus: function (data) {

                Espo.Ui.notify('Получена ошибка: ' + data, 'error', 10000);

                this.resetModelChanges();

                }


                Но п.1 все равно остается - нет ли более простого метода например расширить base или detail что бы не все view где возможно изменение кастомить?

                Comment

                Working...