1

我正在使用 cakephp 2.3.0。我要做的是让用户单击一个链接(以图像的形式),并且该用户操作将从该用户的数据库中删除一些数据。

在我看来,我有这个代码片段,它实际上是表格中的一列。对于“删除”这个词,我希望它是一个图像(使用 $this->Html->image()),但 cakephp 抱怨这一点。根据 API,该参数只能是字符串。

$this->Form->postLink(
                'delete', 
                array('action' => 'deleteActivity', $myActivity['Activity']['id']),
                array('confirm' => 'Are you sure?')),

这是我正在尝试的控制器中的功能:

public function deleteActivity($id) {

        if ($this->Post->delete($id)) {             
            $this->Session->setFlash('The activity with id: ' . $id . ' has been deleted.');
            $this->redirect(array('action' => 'landingPage'));
        }
    }

我收到以下错误。似乎用 post 包装表单标签是行不通的。在 CakePHP 中,我正在尝试做的最佳实践方式是什么?

致命错误

错误:在非对象上调用成员函数 delete()

这是生成的 HTML:

<td><form action="/activities/index.php/activities/deleteActivity/4"      name="post_515496f40ca77" id="post_515496f40ca77" style="display:none;" method="post">    <input type="hidden" name="_method" value="POST"/></form><a href="#" onclick="if (confirm(&#039;Are you sure?&#039;)) { document.post_515496f40ca77.submit(); } event.returnValue = false; return false;">delete</a></td>   
4

1 回答 1

3

错误:

该错误基本上是说“嘿,没有Post对象这样的东西,所以我们不确定如何处理您尝试访问的这个'删除'方法”(换句话说,Post模型尚未加载)

进一步解释/解决方案:

除了您当前所在的控制器之外,您本质上无法访问模型。

所以在你的情况下,你不能直接访问Post模型而不加载它:

$this->loadModel('Post');
$this->Post->delete($id);

或者,如果它与当前模型相关联(例如Activity),您可以通过以下方式访问它:

$this->Activity->Post->delete($id);
于 2013-03-28T20:57:32.917 回答