正确的 TCA 前端映射 'type'=>'check'

Correct frontend mapping of TCA 'type'=>'check'

我目前在 TYPO3 7/Extbase 中实现了一个用户权限对象。根据(简化)将不同的权限映射为 INT 的位:

'permissions' => array(
 'label' => 'permissions'
 'config' => array(
  'type' => 'check',
  'items' => array(
   array('Permission 1', ''),
   array('Permission 2', '')
  )
 )
),

在后端对此进行的修改工作完美无缺,并且标志正确存储为数据库中的相应位。

如何在前端实现类似的行为?是否有(正确的)方法将位值映射到流动复选框?

您可以添加设置或 return 位的自定义 setter/getter 函数。

在您的模型中:

/**
 * @var int
 */
protected $permissions;

添加如下内容:

/**
 * @return int
 */
public function getPermission2() {
  return $this->permissions & 2 > 0 ? 1 : 0;
}

/**
 * @param int $permission2
 */
public function getPermission2($permission2) {
  if ($permission2) {
    $this->permissions = $this->permissions | 2;
  } else {
    $this->permissions = $this->permissions ~ 2;
  }
}

然后您可以 parameter="permission2"f:form.checkbox{object.permission2} 中获取其他流畅的查看助手。

PS:对于权限 1,您需要将 2 更改为 1,对于权限 3,则为 4