Cakephp 1.2将数据从可变数量的复选框传递到控制器

时间:2016-09-16 14:32:26

标签: php forms cakephp controller

我正在处理一段代码以更改应用用户的权限。目前,每个权限一次添加一个,我修改它以更快的方式添加,能够选择多个权限一次添加。

复选框不会是相同的数字,因为它们只是用户尚未拥有的权限。它需要传递具有权限的id。

问题是,我的复选框表格似乎没有向控制器发送任何数据。提交后,它只会加载一个带有控制器网址的空白页面。

继承视图代码,生成复选框表单

<?php

if (!empty($lstAvailablePermissions)) {
    $c=0;
    echo $form->create('Administrator', array('action'=>'addPermission'));
    echo $form->input('id');

    foreach($lstAvailablePermissions as $key){

        echo "<br>";
        echo $form->input(
            'permission', 
            array(

                'id'=>$key,
                'label'=>$key,
                'type'=>'checkbox',
                'multiple'=>'checkbox',
                'value' => $key,
                'name' =>'data[Administrator][permission]['.$c.']'
                ));

        $c=$c+1;
    }
    echo $form->button(__('Add', true), array('type'=>'submit', 'class' => 'button', 'style'=>'padding: 2px; font-size: 12px;'));
    echo $form->end();
 }
?>

和控制器中的方法

 function AddPermission() {
    if (empty($this->data)) { $this->RedirectWithFlash(__("Only POST Requests", true), "/administrators"); }

    ErrorLogWarning("This is the form data sent to the controller", $this->data);

    $length=count($this->data['Administrator']['permission']);
    for ($i = 0; $i < $length; $i++){
    $this->Acl->allow(
        array('model' => 'Administrator', 'foreign_key' => $this->data['Administrator']['id']),
        $this->data['Administrator']['permission'][$i]
    );
}



    $this->RedirectWithSuccessFlash(__("Permission added", true), array('action'=>'edit', $this->data['Administrator']['id']));
}
谁能帮助我弄清楚最近发生了什么?我认为不需要在控制器中循环数据,但它现在甚至都不会发送错误消息。

编辑:问题似乎是通过在表单echo的底部添加name属性来修复的,它将表单作为一个数组发送,可以在控制器中循环。

1 个答案:

答案 0 :(得分:1)

我认为问题可能是您在创建表单时指定'action'=>'addPermission',但您的控制器操作名为AddPermission(大写A)。请尝试更改为'action'=>'AddPermission'

此外,我认为您可能只获得最后一次权限输入,因为您在循环中添加了权限输入。尝试索引输入,如下所示:

foreach($lstAvailablePermissions as $i => $key) {

    echo "<br>";
    echo $form->input(
        "Administrator.{$i).permission",