CakePHP中的自定义数据表单

CakePHP中的自定义数据表单,php,forms,cakephp,acl,Php,Forms,Cakephp,Acl,我正在构建一个控制器来管理CakePHP中基于组的ACL,当我创建或编辑一个组时,我希望能够选择它拥有哪些权限。组数据表仅存储组ID和组名称,因为权限存储在ACO/ARO表中 我有一个来自ACO的数组,我想将其转换为一组复选框,以便您可以选中它们以允许从该组访问该ACO。首先,我如何将这个数组转换为一组复选框。该数组如下所示: array( [0] => array( [Aco] => array( [alias] => 'ali

我正在构建一个控制器来管理CakePHP中基于组的ACL,当我创建或编辑一个组时,我希望能够选择它拥有哪些权限。组数据表仅存储组ID和组名称,因为权限存储在ACO/ARO表中

我有一个来自ACO的数组,我想将其转换为一组复选框,以便您可以选中它们以允许从该组访问该ACO。首先,我如何将这个数组转换为一组复选框。该数组如下所示:

array(
    [0] => array(
        [Aco] => array(
            [alias] => 'alias'
            [id] => 1)
        [children] => array (
            [0] => array(
                [Aco]=>
            ...etc  
    ))
    [1] => array(
        ...etc
)
我的下一个问题是,一旦表单提交给控制器以允许所选操作,我如何检查这些内容

[更新] 好的,改变我问题的角度,我如何使用Form helper创建不基于任何模型的表单?

您可能需要检查(对于CakePHP 1.2)-查看屏幕截图。您想要的功能存在,但使用无线电输入代替复选框。用户和组链接到ACO。因此,更改用户或组树结构可以更改ACOs的树结构。菜单项链接到ARO。因此,更改菜单的树结构就是更改ARO的树结构

例如,在:

公共功能权限($id=null){
$this->\u checkIdPresence($id);
如果(!empty($this->data)){
$aroNode=array('model'=>'Group','foreign_key'=>$this->data['Group']['id']);
foreach($此->数据['Acos']作为$aco){
如果(!empty($aco['permission'])){
$do='';
如果($aco['permission']=='1'){
$do='allow';
}elseif($aco['permission']=='-1'){
$do='deny';
}
$acoNode=array('model'=>$aco['model'],'foreign_key'=>$aco['foreign_key']);
if($this->Acl->{$do}($aroNode,$acode,'*')){
$message=sprintf(保存了对%s的“%s”权限),true),ucfirst($do),$aco['name']);
$this->_flash($message,'success');
}否则{
$message=sprintf(
__(“%s”对%s的权限无法保存。请重试。“,为true),
ucfirst($do),$aco['name']
);
$this->_flash($message,'error');
}
}
}
}
//从数据库获取当前组和所有相关ACO的ARO
$this->data=$this->Group->read(null,$id);
$acosTree=$this->ControlPanel->checkPermissions($id);
$existingPermissions=$this->ControlPanel->findRecordedPermissions($id);
$this->set(压缩('acosTree','existingPermissions');
}
public function permissions($id = null){
    $this->_checkIdPresence($id);
    if(!empty($this->data)){
        $aroNode = array('model' => 'Group', 'foreign_key' => $this->data['Group']['id']);
        foreach($this->data['Acos'] as $aco){
            if(!empty($aco['permission'])){
                $do = '';
                if($aco['permission'] == '1'){
                    $do = 'allow';
                }elseif($aco['permission'] == '-1'){
                    $do = 'deny';
                }
                $acoNode = array('model' => $aco['model'], 'foreign_key' => $aco['foreign_key']);
                if($this->Acl->{$do}($aroNode, $acoNode, '*')){
                    $message = sprintf(__('<i>%s</i> permission to <i>%s</i> has been saved.', true),ucfirst($do), $aco['name']);
                    $this->_flash($message, 'success');
                }else{
                    $message = sprintf(
                        __('<i>%s</i> permission to <i>%s</i> could not be saved. Please, try again.', true),
                        ucfirst($do), $aco['name']
                    );
                    $this->_flash($message, 'error');
                }
            }
        }
    }
    // Get ARO for the current Group and all related ACOs from the db
    $this->data = $this->Group->read(null, $id);
    $acosTree = $this->ControlPanel->checkPermissions($id);
    $existingPermissions = $this->ControlPanel->findRecordedPermissions($id);
    $this->set(compact('acosTree', 'existingPermissions'));
}