Рейтинг:0

Рендеринг настраиваемого поля из формы регистрации пользователя

флаг zm

Я пытаюсь отобразить настраиваемое поле, которое отображается в форме регистрации пользователя, в отдельной новой форме, которая создает пользователей определенной роли с определенными разрешениями.

У меня все работает, кроме возможности отображать это настраиваемое поле.

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

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

$entityTypeManager = \Drupal::service('entity_field.manager');
$fields = $entityTypeManager->getFieldDefinitions('пользователь', 'пользователь');

foreach ($fields как $field_name) {
  тип ($ field_name);
}

Это дает мне список всех полей в регистрации пользователя.

Я чувствую, что упускаю что-то очень очевидное.

4uk4 avatar
флаг cn
Обычно вы создаете пользовательский режим формы и настраиваете нужные вам виджеты полей. Я думаю, вы задаете вопрос, потому что вы создали форму с нуля. Это легко для простых типов полей, но много работы для сложных.
флаг zm
Да, это сборка с нуля внутри модуля. Это должно быть развернуто и включено в производство, над чем у нас минимальный контроль из-за федерального клиента. Я очень мало нахожу в создании пользовательских регистрационных форм и повторном использовании полей из пользовательских форм.
Рейтинг:2
флаг cn

Режим формы — это конфигурация, которую вы можете развернуть через CMI (drush cex/cim) или установить вместе с модулем, включив файлы YAML в папку конфигурации модулей.

Реализация нового режима регистрационной формы не очень интуитивно понятна. Основы:

  1. Создайте режим формы:

    /admin/структура/режимы отображения/форма
    
  2. Включите и настройте его, как в этом вопросе для предустановленного регистр режим формы:

    Как скрыть настраиваемые поля в форме регистрации?

  3. Чтобы разместить новый режим формы на странице, вам нужен модуль contrib

    https://www.drupal.org/project/form_mode_manager

    или пользовательский код:

    Как загрузить форму с определенным отображением формы (режим формы)?

    или собственный маршрут:

    мой модуль.routing.yml

    мой модуль.register2:
      путь: '/admin/люди/ch-create'
      значения по умолчанию:
        _entity_form: 'user.register2'
        _title: 'Создать новую учетную запись'
      требования:
        _permission: «зарегистрировать определенных пользователей»
    

    регистрация2 необходимо зарегистрировать как обработчик формы в типе сущности:

    моймодуль.модуль

    функция mymodule_entity_type_build (массив и $entity_types) {
      $entity_types['user']->setFormClass('register2', 'Drupal\user\RegisterForm');
    }
    
флаг zm
Итак, если я правильно вас понял, форма регистрации пользователя имеет режим формы, который недоступен без прыжков через некоторые обручи (т.е. с использованием этого модуля contrib). Это верно? Я бы предпочел написать это вместо того, чтобы полагаться на модуль contrib, но сначала позвольте мне немного разобраться в этом. Модули Contrib должны быть одобрены и подписаны (просто естественно для некоторых клиентов).
4uk4 avatar
флаг cn
Предустановленный режим формы *Регистрация* — единственный режим формы, который работает «из коробки» без дополнительного кода. Для пользовательского режима формы, такого как *Регистрация 2*, вам нужен **либо** модуль вклада **или** пользовательский код.
флаг zm
Так что я все еще кружу вокруг этого. На самом деле я не пытаюсь создать новый режим формы. Я в порядке с использованием режима формы реестра из коробки.Я просто пытаюсь получить поле ссылки на объект, которое было добавлено в форму регистрации пользователя, во вторую форму регистрации пользователя, которая создает пользователя с уникальной ролью. Я могу получить доступ ко всем видам информации о поле через kint, но я не могу заставить его отобразиться из функции buildForm. Все остальное рендерится нормально. Наверное, я не понимаю, как здесь нужен режим формы, если я могу получить доступ к данным поля.
флаг zm
К вашему сведению... модуль contrib имеет некоторые ошибки и не работает в Drupal 9 прямо сейчас, похоже.
4uk4 avatar
флаг cn
Эти два решения являются лишь примерами, чтобы прояснить, что нужно сделать, существует множество других решений для шага 3, таких как создание пользовательского маршрута формы. Если вы застряли на этом этапе, задайте вопрос с подробностями, где вы хотите разместить вторую форму на своем сайте.
флаг zm
Ага, понятно. На самом деле... Я упустил эту деталь. Это форма администратора.Другими словами, недоступны для анонимных пользователей. Вариант использования заключается в том, что они хотят позволить кому-то добавлять пользователей с определенной ролью, но не хотят предоставлять им доступ к полной регистрационной форме. У меня эта форма полностью построена и работает, за исключением того, что мне нужно одно поле из основной регистрационной формы, которое является полем ссылки на объект. Путь к форме — /admin/people/ch-create и все генерируется написанным мной модулем. Я просто застрял в получении этого поля. Я не нашел много программного повторного использования полей.
4uk4 avatar
флаг cn
ОК, затем создайте маршрут формы объекта для пути. Смотрите отредактированный ответ.
флаг zm
Спасибо за ваше терпение со мной. Я действительно не добился того, чего хотел. Я так и не смог понять, как загрузить одно единственное поле из основной регистрационной формы в новую регистрационную форму на стороне администратора. Опять же, очень мало документации о программном повторном использовании полей. Но это помогло мне полностью воссоздать основную регистрационную форму, и я просто изменил ее под свои нужды и назначил ей роли после завершения. Спасибо за помощь!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.