正确的 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
我目前在 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