【问题标题】:Custom data forms in CakePHPCakePHP 中的自定义数据表单
【发布时间】:2011-02-16 18:25:24
【问题描述】:

我正在构建一个控制器来管理 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
)

我的下一个问题是,一旦将表单提交给控制器以允许所选操作,我该如何检查这些?

[更新] 好的,换个角度,我如何使用表单助手来创建不基于任何模型的表单?

【问题讨论】:

    标签: php forms cakephp acl


    【解决方案1】:

    您可能需要查看PoundCake Control Panel(对于 CakePHP 1.2) - 查看屏幕截图。您想要的功能在那里,但使用无线电输入而不是复选框。用户和组链接到 ACO。因此,更改用户或组树结构会更改 ACO 的树结构。菜单项链接到 ARO。所以,改变菜单的树形结构就改变了 ARO 的树形结构。

    例如在groups_controller.php:

    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'));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多