我正在处理一段代码以更改应用用户的权限。目前,每个权限一次添加一个,我修改它以更快的方式添加,能够选择多个权限一次添加。
复选框不会是相同的数字,因为它们只是用户尚未拥有的权限。它需要传递具有权限的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属性来修复的,它将表单作为一个数组发送,可以在控制器中循环。
答案 0 :(得分:1)
我认为问题可能是您在创建表单时指定'action'=>'addPermission'
,但您的控制器操作名为AddPermission(大写A)。请尝试更改为'action'=>'AddPermission'
。
此外,我认为您可能只获得最后一次权限输入,因为您在循环中添加了权限输入。尝试索引输入,如下所示:
foreach($lstAvailablePermissions as $i => $key) {
echo "<br>";
echo $form->input(
"Administrator.{$i).permission",