我只是打开cakePHP(v1.3.2)。我在我的本地wamp服务器上设置它,似乎工作正常,除了delete()函数不起作用。我正在完全按照他们的博客教程,它尽可能简单,所以我不明白为什么它不起作用。
继承我的PostsController类中的函数:
function delete($id = NULL) {
$this->Post->delete($id);
$this->Session->setFlash('The post with id: '.$id.' has been deleted.');
$this->redirect(array('action'=>'index'));
}
“删除”链接的网址看起来像 http://localhost/posts/delete/id:1(其中id号与特定帖子匹配,显然)。它重定向并设置了flash消息,但是消息中没有$ id的数字,并且帖子不会被删除。似乎正确的id是通过url传递的,但我认为它不会进入函数。
我不明白。任何想法???
答案 0 :(得分:2)
我会尝试http://localhost/posts/delete/1 .... 至少那是我以前在CakePHP工作时记住的URL“形状”。 但那是不久前......
干杯, 詹卢卡。
答案 1 :(得分:1)
想出来,网址生成不当。 这是CakePHP教程的错误。
他们建议您创建删除帖子的链接:
<?php echo $html->link('Delete', array('action' => 'delete', 'id' => $post['Post']['id']), null, 'Are you sure?' );?>
应该是:
<?php echo $html->link('Delete', array('action' => 'delete', $post['Post']['id']), null, 'Are you sure?' );?>
注意区别:url参数中的id不应该是key =&gt;值对'id' => $post['Post']['id']
,而只是值$post['Post']['id']
。
答案 2 :(得分:0)
Gianluca是对的,函数中的参数匹配来自url的传递的args。例如:
如果您有这样的事情:
function my_action($param1=null, $param2=null){
...
}
如果你的网址是http://localhost/post/myaction/1/2,那么在函数$ param1 = 1和$ param2 = 2 你可以传递任意数量的参数。
CakePHP样式中的链接应该如你所指出的那样:
<?php echo $html->link('Delete', array('action' => 'my_action', $param1, $param2)...);?>
如果你想访问id:1,那么你需要从
获取它$this->params['named']['id']
来自控制器。
HTH
答案 3 :(得分:0)
你在模型中有覆盖function beforeDelete()
吗?如果是,则此功能必须为return true;