Я ищу хороший подход с добавлением / обновлением уже подготовленной (по умолчанию) формы пользователя (модуля-пользователя) Magento. Форма доступна в админ панели по этому пути:
Система> Все пользователи> [selected_user]> Основная вкладка редактирования пользователя (Информация об учетной записи)
Теперь я пытаюсь использовать di.xml в моем пользовательском модуле, где я указываю зависимости: `
<preference for="Magento\User\Block\User\Edit\Tab\Main" type="Vendor_Name\Module_Name\Block\User\Edit\Tab\Main" />
<preference for="Magento\User\Block\Role\Grid\User" type="Vendor_Name\Module_Name\Block\Role\Grid\User" />
`
Это контент, который я уже сделал для класса Main.php
// @codingStandardsIgnoreFile
пространство имен Vendor_Name \ Module_Name \ Block \ User \ Edit \ Tab;
используйте \ Magento \ User \ Block \ User \ Edit \ Tab \ Main as UserEditMainTab;
use \ Magento \ Backend \ Block \ Template \ Context;
использовать \ Magento \ Framework \ Registry;
использовать \ Magento \ Framework \ Data \ FormFactory;
использовать \ Magento \ Backend \ Model \ Auth \ Session;
использовать \ Magento \ Framework \ Locale \ ListsInterface;
Класс Main расширяет UserEditMainTab
{
публичная функция __construct (
Context $ context,
Registry $ Registry,
FormFactory $ formFactory,
Сессия $ authSession,
ListsInterface $ localeLists,
массив $ data = []
) {
конструкция parent :: __ ($ context, $ registry, $ formFactory, $ authSession, $ localeLists, $ data);
}
защищенная функция _prepareForm ()
{
/ ** @var $ model \ Magento \ Пользователь \ Модель \ Пользователь * /
$ model = $ this -> _ coreRegistry-> registry ('permissions_user');
/ ** @var \ Magento \ Framework \ Data \ Form $ form * /
$ form = $ this -> _ formFactory-> create ();
$ Форма-> setHtmlIdPrefix ( 'user_');
$ baseFieldset = $ form-> addFieldset ('base_fieldset', ['legend' => __ ('Account Information __ TEST')]);
if ($ model-> getUserId ()) {
$ baseFieldset-> addField ('user_id', 'hidden', ['name' => 'user_id']);
} еще {
if (! $ model-> hasData ('is_active')) {
$ Модели-> setIsActive (1);
}
}
$ BaseFieldset-> AddField (
'User_image',
'образ',
[
'name' => 'user_image',
'label' => __ ('User Image'),
'id' => 'user_image',
'title' => __ ('User Image'),
'required' => false,
'note' => 'Разрешить тип изображения: jpg, jpeg, png'
]
);
$ BaseFieldset-> AddField (
«Имя пользователя»,
'текст',
[
'name' => 'username',
'label' => __ ('Имя пользователя'),
'id' => 'username',
'title' => __ ('Имя пользователя'),
'required' => true
]
);
$ BaseFieldset-> AddField (
'Имя',
'текст',
[
'name' => 'firstname',
'label' => __ ('Имя'),
'id' => 'firstname',
'title' => __ ('Имя'),
'required' => true
]
);
$ BaseFieldset-> AddField (
'фамилия',
'текст',
[
'name' => 'фамилия',
'label' => __ ('Фамилия'),
'id' => 'фамилия',
'title' => __ ('Фамилия'),
'required' => true
]
);
$ BaseFieldset-> AddField (
'электронное письмо',
'текст',
[
'name' => 'email',
'label' => __ ('Email'),
'id' => 'customer_email',
'title' => __ ('Email пользователя'),
'class' => 'required-entry validate-email',
'required' => true
]
);
$ isNewObject = $ model-> isObjectNew ();
if ($ isNewObject) {
$ passwordLabel = __ ('Пароль');
} еще {
$ passwordLabel = __ ('Новый пароль');
}
$ translationLabel = __ («Подтверждение пароля»);
$ this -> _ addPasswordFields ($ baseFieldset, $ passwordLabel, $ translationLabel, $ isNewObject);
$ BaseFieldset-> AddField (
'Interface_locale',
'Выбрать',
[
'name' => 'interface_locale',
'label' => __ ('Язык интерфейса'),
'title' => __ ('Язык интерфейса'),
'values' => $ this -> _ LocaleLists-> getTranslatedOptionLocales (),
'class' => 'select'
]
);
if ($ this -> _ authSession-> getUser () -> getId ()! = $ model-> getUserId ()) {
$ BaseFieldset-> AddField (
'Is_active',
'Выбрать',
[
'name' => 'is_active',
'label' => __ ('Это аккаунт'),
'id' => 'is_active',
'title' => __ ('Статус аккаунта'),
'class' => 'input-select',
'options' => ['1' => __ ('Active'), '0' => __ ('Inactive')]
]
);
}
$ baseFieldset-> addField ('user_roles', 'hidden', ['name' => 'user_roles', 'id' => '_user_roles']);
$ currentUserVerificationFieldset = $ form-> addFieldset (
'Current_user_verification_fieldset',
['legend' => __ ('Проверка подлинности текущего пользователя')]
);
$ CurrentUserVerificationFieldset-> AddField (
самостоятельно :: CURRENT_USER_PASSWORD_FIELD,
'пароль',
[
'name' => self :: CURRENT_USER_PASSWORD_FIELD,
'label' => __ ('Ваш пароль'),
'id' => self :: CURRENT_USER_PASSWORD_FIELD,
'title' => __ ('Ваш пароль'),
'class' => 'input-text validate-current-password required-entry',
'required' => true
]
);
$ data = $ model-> getData ();
снята с охраны ($ данных [ 'пароль']);
снята с охраны ($ данных [само :: CURRENT_USER_PASSWORD_FIELD]);
$ Форма-> setValues ($ данных);
$ This-> Setform ($ форма);
вернуть родителя :: _ prepareForm ();
}
}
и немного кода для User.php
пространство имен Vendor_Name \ Module_Name \ Block \ Role \ Grid;
используйте \ Magento \ User \ Block \ Role \ Grid \ User в качестве RoleGridUser;
используйте \ Magento \ Backend \ Block \ Widget \ Grid \ Extended как ExtendedGrid;
Класс User расширяет RoleGridUser
{
защищенная функция _prepareColumns ()
{
Родитель :: _ prepareCollection ();
$ This-> addColumn (
'User_image',
[
'header' => __ ('User Image'),
'ширина' => 5,
'align' => 'left',
'сортируемый' => правда,
'index' => 'user_image'
]
);
return ExtendedGrid :: _ prepareCollection ();
}
}
Если вы посмотрите поближе, то уже сейчас, когда я пытаюсь добавить поле с изображением пользователя.
К сожалению, я не вижу никаких изменений в администрировании. Конечно, необходимый столбец был добавлен скриптом InstallSchema ранее в таблицу ' admin_user '.
Содержимое каталогов в древовидном формате:
mODULE_NAME Block── Блок │ ├── Каталог │ │ └── Продукт │ │ └── RelatedPosts.php │ ├── Роль │ │ └── Сетка │ │ └── User.php │ └── Пользователь Edit └── Править Tab └── Вкладка │ └── Main.php Comp── composer.json Etc── и т. Д. │ ├── di.xml │ └── module.xml Setup── Настройка Install── InstallSchema.php
Что я сделал не так?