andreyryabin / sprint.migration

Миграции для разработчиков (1С-Битрикс)
http://marketplace.1c-bitrix.ru/solutions/sprint.migration/
MIT License
173 stars 56 forks source link

web form migrations #9

Closed StepanRodionov closed 6 years ago

StepanRodionov commented 6 years ago

Сделал конструктор для миграции форм Он покрывает не все кейсы, особенно экзотические, но как упрощение миграции простых форм сойдет

andreyryabin commented 6 years ago

Приветствую, спасибо за работу :) Единственное надо переделать хелпер формы, если вы посмотрите на соседние хелперы, то обратите внимание что каждый метод независим друг от друга и не меняет состояние хелпера, у вас же состояние меняется после initForm()

в общем надо избавиться от $this->formId

да и сам метод initForm($formId, $what) можно переименовать в getFormById($formId)

StepanRodionov commented 6 years ago

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

andreyryabin commented 6 years ago

Добрый день, по конструктуру всех хорошо :+1:

Единственное не надо передавать параметр с описанием 'description' => htmlspecialchars($this->getFieldValue('description')) для этого параметра достаточно создать поле ввода

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

Как раз наоборот, хелпер важнее, так как его методы могут использоваться и в других миграциях, сделанных, например, вручную.

По коду хелпера пара вопросов, я в апи форм не вникал, там действительно без прямых запросов не обойтись?

и предлагаю убрать у метода public function getFormById($formId, $what) параметр $what

вместо этого либо все вычислять сразу, либо сделать 2 доп метода getFormRights и getFormTemplates

Также если у вас есть публичные методы типа public function saveStatuses($formId, $statuses)

то должны быть методы и получения значений параметров для этого метода, например getFormId($filterOrCode) и getStatuses($formId)

p.s. я в любом случае буду включать ваш код в модуль, но скорее всего внесу изменения если не увижу ваших правок :)

StepanRodionov commented 6 years ago

По коду хелпера пара вопросов, я в апи форм не вникал, там действительно без прямых запросов не обойтись?

Не нашел я в API нужных методов, поэтому начал искать в исходниках - там используются запросы напрямую. D7 представлений таблиц тоже не было. Короче говоря, скорее всего, только так можно

Также если у вас есть публичные методы типа public function saveStatuses($formId, $statuses)

то должны быть методы и получения значений параметров для этого метода, например getFormId($filterOrCode) и getStatuses($formId)

Есть такие) getFormIdBySid($sid) и getFormStatuses($formId)

Вообще, конечно, еще много чего можно прикрутить сюда, но, для того, чтобы оно было полезно, надо столкнуться с этой болью в каком-нибудь проекте. Наверняка что-то упустил, потому что не пользовался ранее какой-нибудь фишкой модуля