如何从视图模块获取 $_POST 请求?

How to get a $_POST request from view module?

我想从视图模块中的 table 中获取复选框,但我无法让它工作。这是 table:

     <form action="" method="post">
     <TABLE id="dt_basic" class="table table-striped table-bordered table-hover dataTable">
        <THEAD>
          <TR>
            <TH></TH>
            <TH>ID</TH>
            <TH>Client</TH>
            <TH>User</TH>
            <TH>Role</TH>
            <TH>Projects</TH>
          </TR>
        </THEAD>
        <TBODY>
<?php
/* @var $item Admin\Model\User */
foreach ($this->users as $item) {
    ?>
    <TR>
        <TD class='admin'><input type="checkbox" name="users[<?php echo $item->id; ?>]" value=<?php echo $item->id; ?> checked/></TD>
        <TD class='admin c'><?= $item->id ?></TD>
        <TD class='admin'><?= $item->getClientObject() ?></TD>
        <TD class='admin'>
            <img src="<?= $item->getAvatarPath() ?>" alt="me" class="online avatar"/>
            <a title='details'
               href='/admin/user/detail/id/<?= $item->id ?>'><?= $item->name . " " . $item->surname ?> </a>
        </TD>
        <TD class='admin'><?= $item->getRoleObject() ?></TD>
        <TD class='admin'>
            <a title='projects' class='btn btn-default btn-sm'
               href='/admin/user/project/id/<?= $item->id ?>'><i
                    class='fa fa-icon-fix fa-briefcase'></i></a>
            <?
            foreach ($this->projects[$item->id] as $i => $project) {
                echo $project->getName();
                if ($i != sizeof($this->projects[$item->id]) - 1)
                    echo " • ";
            }
            ?>
        </TD>
    </TR>
<?php
}
?>
        </TBODY>
      </TABLE>
    </form>

整个.phtmlhttp://pastebin.com/8paJZgjb

我想获取 users[] 数组并在控制器中使用它的元素,但我找不到获取它的方法。到目前为止,这是我尝试过的方法:

           if (!empty($_POST["users"])) {
            foreach (($_POST["users"]) as $selectedUsers) {
                $users = $this->getUserTable()->fetchAll(false, "id=" .  $selectedUsers);
            }
        } else {
            $this->cache->error = "Please choose at least one user.";
            return $this->view;
        }

整个函数:http://pastebin.com/pE4afemx

...但显然它是空的。 var_dump 显示邮件表单中的元素,但没有用户的迹象:

array (size=2)
'subject' => string 'hello' (length=5)
'message' => string 'message' (length=7)

有什么建议吗?

根据您的 pastebin link 中的代码,页面上有 两个 表单。一个从第 16 行开始,包含您的用户复选框,然后在第 61 行结束。然后第二个从第 77 行开始到第 79 行结束。我猜这是由 javascript 提交按钮提交的在第 86 行。

由于您提交的是第二个表单,因此只会发布其数据。如果您希望提交所有内容,则所有内容都需要采用一种形式。理想情况下,您会将用户复选框移出此模板,它们作为 $form 的一部分输出,但以这种方式将它们保持在 table 布局中可能会很棘手,因此更容易修复移动包含用户复选框的 table,以便它在 echo $this->formCollection($form); 之后但在以 echo $this->form()->closeTag(); 结束的表单之前输出。去掉第 16 行和第 61 行的表单标签,因为您只需要一个表单。

编辑:要解决其他问题,请尝试将您的控制器代码更改为:

if (!empty($_POST["users"])) {
    $userIDs = array();
    foreach ($_POST["users"] as $selectedUser) {
        if (is_numeric($selectedUser) && $selectedUser > 0) {
            $userIDs[] = $selectedUser;
        }
    }

    if (count($userIDs) > 0) {
        $users = $this->getUserTable()->fetchAll(false, "id IN (".implode(', ', $userIDs).")");
    }