TYPO3 / Как сделать репозиторий из существующей таблицы fe_users?
Я создаю специальный модуль BE с Extbase и Fluid, и мне нужен объект домена, который будет представлять стандартного пользователя FE. Когда я создаю новый объект домена с именем, например, Feuser и сохраняю его, построитель расширений создает специальный репозиторий, а также хочет создать специальную таблицу tx_myextkey_feuser в базе данных. Но эта таблица уже существует как fe_users.
Можно ли сказать typo3, что хранилище для объектов Feuser уже существует (как таблица fe_users) и что typo3 должен использовать существующий? Как я могу это сделать?
Мне это нужно, потому что расширение (включая этот модуль BE) должно иметь всю логику и элементы управления в одном месте (этот модуль BE).
Вообще говоря, мне нужен один и тот же диалог вставки для новых пользователей FE в двух местах, если это возможно. Если нет, я могу создать свои собственные действия New/Edit/Show, но мне нужно сообщить TYPO3, что он должен использовать существующий репозиторий с пользователями FE.
Я использую опечатку 4.7.3.
2 ответа
ExtBase уже поставляется с моделью предметной области для существующей таблицы fe_user. Эта модель предметной области:
Tx_Extbase_Domain_Model_FrontendUser
Он содержит все поля по умолчанию fe_users, которые поставляются с TYPO3.
Если вы расширили fe_users своими собственными полями, вам также нужно расширить модель домена Tx_Extbase_Domain_Model_FrontendUser и связанный репозиторий, чтобы он знал новые поля, добавленные вами в fe_users.
Связанный репозиторий:
Tx_Extbase_Domain_Repository_FrontendUserRepository
Вы должны установить PID хранилища для репозитория, чтобы он мог найти ваших fe_users.
Для действий контроллера, используемых в плагинах внешнего интерфейса, используйте:
plugin.your_plugin {
persistence {
storagePid = somePid, anotherPid
}
}
Если действия контроллера, используемые в бэкэнд-модулях, используют:
module.your_module {
persistence {
storagePid = somePid, anotherPid
}
}
Насколько я знаю, невозможно использовать те же диалоговые окна, которые поставляются с TYPO3 для вашего собственного расширения, поэтому вы должны создавать свои собственные действия (new/edit/show) и формы в своем бэкэнд-модуле.
[Редактировать]
По умолчанию ExtBase предполагает, что всем fe_users назначен тип записи. Когда вы откроете одного из ваших внешних пользователей, вы увидите, что вкладка "Расширенная" содержит раскрывающееся поле, которое помечено как "Тип записи". Если это поле не установлено, ExtBase не сможет найти fe_user, используя один из методов find из репозитория.
Вы должны установить тип записи для всех fe_users (рекомендуемый способ), или вы можете отключить отображение на поле, используя следующий TS в вашей настройке
config.tx_extbase.persistence.classes {
Tx_Extbase_Domain_Model_FrontendUser {
mapping.recordType >
}
}
Для вновь созданных fe_users или fe_groups вы можете установить значение по умолчанию для поля "тип записи", добавив следующий TS к вашей корневой странице. TS
TCAdefaults.fe_users.tx_extbase_type = Tx_Extbase_Domain_Model_FrontendUser
TCAdefaults.fe_groups.tx_extbase_type = Tx_Extbase_Domain_Model_FrontendUserGroup
Для Extbase 6.X
Вам нужно дать класс как \TYPO3\CMS\Extbase\Domain\Model\FrontendUser вместо Tx_Extbase_Domain_Repository_FrontendUserRepository в Расширить поле существующего класса модели внутри построителя расширений
После этого вы можете контролировать fe_users внутри вашей модели....
Также добавьте файл ext_typoscript_setup.txt в корень вашего расширения (добавляется автоматически, если генерируется с помощью extension_builder)
config.tx_extbase{
persistence{
classes{
TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
subclasses {
Tx_Extendfeuser_Extended = Model_class_with_namespace
}
}
SkiBoutique\SbChalets\Domain\Model\Extended {
mapping {
tableName = fe_users
recordType = Tx_Extendfeuser_Extended
}
}
}
}
}
Спасибо!!!
Работает также с TYPO3 7.6.X