直接调用存储库
表的启用字段有两个方面fe_users
:
$querySettings->setIgnoreEnableFields(true);
$querySettings->setEnableFieldsToBeIgnored(['disable']);
看看一些维基页面中的概述 https://wiki.typo3.org/Default_Orderings_and_Query_Settings_in_Repository#Default_Orderings_and_Query_Settings_TYPO3_6.0_-_6.2_.28extbase_6.0_-_6.2.29- 它说的是 6.2,但它在大多数情况下对于 7.6 和 8 仍然有效。但是,这仅在直接调用存储库时才有效,但如果将一个实体作为另一个实体的一部分进行检索,则不起作用 - 在这种情况下,存储库不用于嵌套实体。
修改嵌套实体的查询设置
嵌套实体被隐式检索 - 这发生在DataMapper::getPreparedQuery(DomainObjectInterface $parentObject, $propertyName)
。要调整子实体的查询设置,QueryFactoryInterface
实施必须超载。
注册一个替代实现ext_localconf.php
(代替\Vendor\ExtensionName\Persistence\Generic\QueryFactory
与您的扩展的真实类名):
$extbaseObjectContainer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
\TYPO3\CMS\Extbase\Object\Container\Container::class
);
$extbaseObjectContainer->registerImplementation(
\TYPO3\CMS\Extbase\Persistence\Generic\QueryFactoryInterface::class,
\Vendor\ExtensionName\Persistence\Generic\QueryFactory::class
);
在新的 Typo3 版本 (v8+) 中,registerImplementation 方法不再适用于 QueryFactory。相反,一个XCLASS https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Xclasses/Index.html必须用于覆盖/扩展类:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\TYPO3\CMS\Extbase\Persistence\Generic\QueryFactory::class] = [
'className' => \Vendor\ExtensionName\Persistence\Generic\QueryFactory::class,
];
然后在实现内部:
<?php
namespace \Vendor\ExtensionName\Persistence\Generic;
use TYPO3\CMS\Extbase\Domain\Model\FrontendUser;
class QueryFactory extends \TYPO3\CMS\Extbase\Persistence\Generic\QueryFactory {
public function create($className) {
$query = parent::create($className);
if (is_a($className, FrontendUser::class, true)) {
// @todo Find a way to configure that more generic
$querySettings = $query->getQuerySettings();
$querySettings->setIgnoreEnableFields(true);
// ... whatever you need to adjust in addition ...
}
return $query;
}
}