ZF2 deleteAction 不工作
ZF2 deleteAction not working
public function deleteAction() {
$id = (int) $this->params()->fromRoute('id',0);
if (!$id) {
return $this->redirect()->toRoute('studfood');
}
$request = $this->getRequest();
if ($request->isPost()) {
$del = $request->getPost('del', 'No');
if ($del == 'Yes') {
$id = (int) $request->getPost('id');
$this->getRezepteTable()->deleteRezepte($id);
}
return $this->redirect()->toRoute('studfood');
}
return array(
'id' => $id,
'studfood' => $this->getRezepteTable()->getRezepte($id)
); }
如您所见,那是我 "RezepteController" 中的 deleteAction。我居然把zend2的专辑教程抄过来了
namespace Studfood\Model;
use Zend\Db\TableGateway\TableGateway;
use Studfood\Model\Rezepte;
use Zend\Db\Sql\Sql;
use Zend\Db\Adapter\Adapter;
class RezepteTable {
protected $tableGateway;
public function __construct(TableGateway $tableGateway) {
$this->tableGateway = $tableGateway;
}
public function deleteRezepte($id) {
if($id != 0) {
$this->tableGateway->delete(array('id' => (int) $id)); }
else { throw new \Exception('id = 0'); }
} }
这就是我的 RezepteTable,其中包含数据库命令。
所以我的问题是,如果我想删除某些内容并按下按钮 "Yes",什么也没有发生。这就是我将此异常添加到 RezepteTable 的原因。而且我总是得到 id=0 异常。
与教程的唯一区别是,我在我的项目中添加了更多表格,其中包含 Forgein Keys。 (带关节的 fetchall 等)。
<?php
use Studfood\Model\Rezepte;
$name = 'Rezepte loeschen';
$this->headTitle($name);
?>
<h1><?php echo $this->escapeHtml($name); ?></h1>
p>Are you sure that you want to delete
'<?php echo $this->escapeHtml($rezepte->name); ?>'?
</p>
<?php
$url = $this->url('studfood', array(
'action' => 'delete',
'id' => $this->id,
));
?>
<form action="<?php echo $url; ?>" method="post">
<div>
<input type="hidden" name="id" value="<?php echo (int) $rezepte->id; ?>" />
<input type="submit" name="del" value="Yes" />
<input type="submit" name="del" value="No" />
</div>
</form>
这就是我最后删除的视图。
接下来会发生什么:
如果没有异常,它只会将我重定向到我的主页。
所以我不知道我的错误在哪里。有人知道吗?
非常感谢。
您从 post 获取 ID。不能用route的id吗?
在您看来,您使用两种不同的方式来输出 id $this->id
和 $rezepte->id
。您确定两者都包含正确的值吗?
我认为您应该检查表单中隐藏的 id
字段上的 value
?
public function deleteAction() {
$id = (int) $this->params()->fromRoute('id',0);
if (!$id) {
return $this->redirect()->toRoute('studfood');
}
$request = $this->getRequest();
if ($request->isPost()) {
$del = $request->getPost('del', 'No');
if ($del == 'Yes') {
$id = (int) $request->getPost('id');
$this->getRezepteTable()->deleteRezepte($id);
}
return $this->redirect()->toRoute('studfood');
}
return array(
'id' => $id,
'studfood' => $this->getRezepteTable()->getRezepte($id)
); }
如您所见,那是我 "RezepteController" 中的 deleteAction。我居然把zend2的专辑教程抄过来了
namespace Studfood\Model;
use Zend\Db\TableGateway\TableGateway;
use Studfood\Model\Rezepte;
use Zend\Db\Sql\Sql;
use Zend\Db\Adapter\Adapter;
class RezepteTable {
protected $tableGateway;
public function __construct(TableGateway $tableGateway) {
$this->tableGateway = $tableGateway;
}
public function deleteRezepte($id) {
if($id != 0) {
$this->tableGateway->delete(array('id' => (int) $id)); }
else { throw new \Exception('id = 0'); }
} }
这就是我的 RezepteTable,其中包含数据库命令。
所以我的问题是,如果我想删除某些内容并按下按钮 "Yes",什么也没有发生。这就是我将此异常添加到 RezepteTable 的原因。而且我总是得到 id=0 异常。
与教程的唯一区别是,我在我的项目中添加了更多表格,其中包含 Forgein Keys。 (带关节的 fetchall 等)。
<?php
use Studfood\Model\Rezepte;
$name = 'Rezepte loeschen';
$this->headTitle($name);
?>
<h1><?php echo $this->escapeHtml($name); ?></h1>
p>Are you sure that you want to delete
'<?php echo $this->escapeHtml($rezepte->name); ?>'?
</p>
<?php
$url = $this->url('studfood', array(
'action' => 'delete',
'id' => $this->id,
));
?>
<form action="<?php echo $url; ?>" method="post">
<div>
<input type="hidden" name="id" value="<?php echo (int) $rezepte->id; ?>" />
<input type="submit" name="del" value="Yes" />
<input type="submit" name="del" value="No" />
</div>
</form>
这就是我最后删除的视图。
接下来会发生什么:
如果没有异常,它只会将我重定向到我的主页。
所以我不知道我的错误在哪里。有人知道吗?
非常感谢。
您从 post 获取 ID。不能用route的id吗?
在您看来,您使用两种不同的方式来输出 id $this->id
和 $rezepte->id
。您确定两者都包含正确的值吗?
我认为您应该检查表单中隐藏的 id
字段上的 value
?