TYPO3将uid设置为新模型

时间:2018-08-07 14:28:20

标签: php typo3 typo3-8.x

简单的问题:如何将uid设置为新模型? TYPO3 8.7.17。 我尝试添加方法

public function setUid($uid)
{
   $this->uid = $uid;
}

我假设我正在创建自定义扩展,并且我想将uid保存到新模型中 但是模型不能保存。我知道这是不推荐的。但是我有理由为什么需要它。

我需要id,因为用户每天都要从csv导入数据。而且我有相关数据。当用户输入时,导入uid会更改。我也无法指定日期。

3 个答案:

答案 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(),而无需在自己的模型类中编写它。

主要问题是uidauto_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。