【问题标题】:Cakephp 1.2 passing data from variable number of checkboxes to form in controllerCakephp 1.2将数据从可变数量的复选框传递到控制器中
【发布时间】:2016-09-16 14:32:25
【问题描述】:

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

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

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

这是生成复选框表单的视图代码

<?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 属性得到解决,它将它作为可以在控制器中循环的数组发送。

【问题讨论】:

    标签: php forms cakephp controller


    【解决方案1】:

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

    另外,我认为您可能只会获得最后一个权限输入,因为您是在循环中添加权限输入。尝试像这样索引输入:

    foreach($lstAvailablePermissions as $i => $key) {
    
        echo "<br>";
        echo $form->input(
            "Administrator.{$i).permission", 
    

    【讨论】:

    • 好消息现在传给了控制器。坏消息是它往往只添加一个权限,而不管检查了多少。我编辑了原始帖子以显示正在使用的新代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多