如何从视图模块获取 $_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>
整个.phtml
:http://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).")");
}
我想从视图模块中的 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>
整个.phtml
:http://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).")");
}