在较早的TYPO3版本(如TYPO3 8.7.x )中,我使用DataMapper将查询生成器选择结果的结果映射到对象数组。这在TYPO3 8.7.x中运行良好,但在TYPO3 9.5.x中,我得到了错误消息“调用null上的成员函数buildDataMap()”。
//MyRepository.php
namespace Vendor\MyExtension\Domain\Repository;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper;
/**
* @param string $search
*
* @return array
*/
public function findBySearch($search)
{
$querybuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_myextension_domain_model_produkt');
$records = $querybuilder->select('tx_myextension_domain_model_produkt.*')
->from('tx_myextension_domain_model_produkt')
->orWhere(
$querybuilder->expr()->like('titel', $querybuilder->createNamedParameter('%' . $search . '%')),
$querybuilder->expr()->like('untertitel', $querybuilder->createNamedParameter('%' . $search . '%'))
)
->orderBy('titel')
->execute()
->fetchAll();
$dataMapper = GeneralUtility::makeInstance(DataMapper::class);
return $dataMapper->map($this->objectType, $records);
}发布于 2019-06-04 10:39:44
有些类需要其他对象作为依赖项。如果属性是用TYPO3注释的,或者如果有匹配的injectPropertyName方法,则在@inject中是这样的。
在这种情况下,应该使用DataMapper实例化类(在本例中为ObjectManager )。
通常看起来是这样的:
$dataMapper = GeneralUtiity::makeInstance(ObjectManager::class)->get(DataMapper::class);发布于 2021-01-07 13:01:51
由于get方法的ObjectManager在TYPO3版本10中被标记为不推荐使用,所以我使用inject连接来获取DataMapper实例
/**
* Datamaper
*
* @var DataMapper
* @TYPO3\CMS\Extbase\Annotation\Inject
*/
protected $dataMapper;https://stackoverflow.com/questions/56442092
复制相似问题