TYPO3 从 cruser_id 字段获取用户

TYPO3 get the user from cruser_id field

我想显示创建元素的用户。 TCA 看起来像这样:

  'ctrl' => [
    'title' => 'Title',
    'label' => 'title',
    'tstamp' => 'tstamp',
    'crdate' => 'crdate',
    'cruser_id' => 'cruser_id',

使用 getter 我可以获得 tstamp 和 crdate。但是对于 cruser_id 这不起作用。我怎样才能得到 cruser_id 用户的用户名?

以下示例适用于 TYPO3 11.5.8,也应该适用于 TYPO3 10。

首先你需要在你的模型上使用 getters 和 setters (\YourVendor\YourExtension\Domain\Model\YourModel)

/**
 * @var int
 */
protected int $cruserId = 0;

/**
 * @return int
 */
public function getCruserId(): int
{
    return $this->cruserId;
}

/**
 * @param int $cruserId
 */
public function setCruserId(int $cruserId): void
{
    $this->cruserId = $cruserId;
}

然后你需要为这个特定的字段添加TCA配置。您不需要在 types 或其他任何地方添加它。 TYPO3 只需要配置,所以它知道如何处理它。

'cruser_id' => [
    'config' => [
       'type' => 'input',
       'size' => 10,
       'max' => 255,
   ],
],

最后一点,您需要将其映射到右栏。所以在你的 your_extension/Configuration/Extbase/Persistence/Classes.php 下你需要添加你的模型和 属性:

 \YourVendor\YourExtension\Domain\Model\YourModel::class => [
  'columns' => [
        'cruserId' => [
            'mapOnProperty' => 'cruser_id'
        ]
    ]
 ]

这里有一个参考:


后端用户对象

如果要获取后台用户信息,步骤相同,但需要做一些改动。

型号

use TYPO3\CMS\Beuser\Domain\Model\BackendUser

/**
 * @var BackendUser|null
 */
protected ?BackendUser $cruserId = null;

 /**
 * @return BackendUser|null
 */
public function getCruserId(): ?BackendUser
{
    return $this->cruserId;
}

/**
 * @param ?BackendUser $cruserId
 */
public function setCruserId(?BackendUser $cruserId): void
{
    $this->cruserId = $cruserId;
}

TCA

'cruser_id' => [
   'config' => [
     'type' => 'select',
     'renderType' => 'selectSingle',
     'foreign_table' => 'be_users',
     'foreign_table_where' => 'ORDER BY username',
   ],
],

这将为您提供以下内容:

希望对您有所帮助