ZF2 deleteAction不起作用

时间:2016-01-04 13:10:07

标签: php zend-framework zend-framework2 sql-delete

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,里面有数据库命令。

所以我的问题是,如果我想删除某些内容并按下按钮"是",则没有任何反应。这就是我将此Exception添加到RezepteTable的原因。我总是得到id = 0 Exception。

与教程的唯一区别是,我在其中添加了更多表格,其中包含Forgein Keys。 (带关节等的胎儿)。

 <?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>

最后我删除了View。

所以会发生以下情况:

  1. 我按下要删除的行上的删除按钮。

  2. 我按是Delete1

  3. 由于deleteRezepte Delete2

  4. 中的异常,我收到错误消息

    如果没有Exception,它只会将我重定向到我的主页面。

    所以我不知道我的错误在哪里。有人有任何想法吗?

    非常感谢。

1 个答案:

答案 0 :(得分:0)

你从帖子中获得了id。你能否在路线上使用id?

在您的视图中,您使用两种不同的方式输出ID $this->id$rezepte->id。你确定两者都包含正确的值吗?

我认为您应该检查表单中隐藏value字段的id吗?