简单的问题:如何将uid设置为新模型? TYPO3 8.7.17。 我尝试添加方法
public function setUid($uid)
{
$this->uid = $uid;
}
我假设我正在创建自定义扩展,并且我想将uid保存到新模型中 但是模型不能保存。我知道这是不推荐的。但是我有理由为什么需要它。
我需要id,因为用户每天都要从csv导入数据。而且我有相关数据。当用户输入时,导入uid会更改。我也无法指定日期。
答案 0 :(得分:1)
设置uid
不太容易,但是您可以使用\TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper
从给定的数据数组创建实体实例。
$data = [
'uid' => 10101,
'title' => 'Foo Bar Baz',
…
];
$dataMapper = GeneralUtility::makeInstance(ObjectManager::class)
->get(DataMapper::class);
$obj = reset($dataMapper->map(YourModel::class, [data]));
或者您只需创建模型的新实例,然后使用Reflection更改uid属性:
$obj = new YourEntity();
$refl = new ReflectionClass(YourEntity::class);
$refl->getProperty('uid')->setValue($obj, '10101');
在导入的情况下,我更喜欢前一种方式,因为您需要以某种方式将数据映射到实例,这就是DataMapper的目的。
反过来,您可能会看看here
答案 1 :(得分:0)
如果我没记错的话,函数setUid()
已经存在于模型中,通常它只是由您自己的模型类扩展的类。
因此,您可能已经使用setUid()
,而无需在自己的模型类中编写它。
主要问题是uid
是auto_increment
,索引和主键,因此您必须确保uid的新值始终是唯一的。
另外,setUid()
的个别用法在TYPO3中可能仍被阻止。
对于与进口相关的挑战,可以使用扩展名external_import。
答案 2 :(得分:0)
从3月3日起,您可以(应该)使用教义:
function getCurrentFilters() {
$filters = [];
foreach (\Session::get('widget', []) as $name => $item) {
if (str_contains($name, 'Filter')) {
$filter = @unserialize(@base64_decode($item));
if ($filter) {
//$filters[] = $filter;
array_push($filters, $filter);
}
}
}
return $filters;
}
简单而标准。即使在t3。