1.13 删除文章

对文章的操作中,浏览、阅读、编辑和添加功能我们都做了,只剩下删除功能了。

1.13.1 “Delete” Action方法

找到并打开Blog.php文件。(在此示例中,我们使用vim编辑器,你可以选择自己最喜欢的)

$ vim Blog.php

在类中添加如下PHP代码:

<?php
    public function actionDelete($id = null)
    {
        // was an ID specified?
        if (! $id) {
            return $this->_error('ERR_NO_ID_SPECIFIED');
        }
        
        // fetch one blog article by ID
        $this->item = $this->_model->blogs->fetch($id);
        
        // did the blog article exist?
        if (! $this->item) {
            return $this->_error('ERR_NO_SUCH_ITEM');
        }
        
        // did the user click the delete button?
        if ($this->_isProcess('delete')) {
            $this->item->delete();
            $this->_view = 'deleteSuccess';
        }
    }
[Note]改变默认视图

默认情况下,Solar页面控制器会使用和Action名一样的视图。但是,你可以通过指定$this->_view的值来改变这一默认行为。

在这个方法中发生了什么?

  • 我们试着通过ID获取博客文章,如果文章不存在,则报错。

  • 接着,我们通过检测_isProcess()函数来判断用户是否点击了'delete'按钮。如果是,我们便删除该记录,并跳转到deleteSuccess 视图(而不是默认的delete 视图)

这就是刚才发生的一切,不用怀疑,只有这么多。

1.13.2 “Delete”视图文件

这个Action使用了两张视图:一张用来显示“Are you sure?”(默认视图),另一张显示“Successfully deleted the record”。

首先,创建delete.php视图文件:

$ vim Blog/View/delete.php

。。。在刚创建的delete.php视图文件中加入以下代码:

<?php
    $title = $this->getTextRaw('TITLE_DELETE');
    $this->head()->setTitle($title);
?>

<h2><?php echo $this->getText('HEADING_DELETE'); ?></h2>

<h3><?php echo $this->escape($this->item->title); ?></h3>

<?php echo $this->nl2p($this->item->body); ?>

<?php echo $this->form()
                ->addProcess('delete')
                ->fetch();
?>

简单来说,这张视图显示将被删除的博客文章,并且生成一张只含“delete”按钮的表单(“delete”过程)。

接下来,创建deleteSuccess.php视图文件。

$ vim Blog/View/deleteSuccess.php

。。。在刚创建的deleteSuccess.php视图文件中加入以下代码:

<p><?php echo $this->getText('TEXT_DELETED'); ?></p>

这张视图只做了一件事,就是:显示一些静态文本来表明该记录已被删除。

你现在可以浏览http://localhost/index.php/blog/delete/3,还可以点击“Delete”按钮删除这篇博文。