开发者

CakePHP delete() function is not working

I'm just cracking open cakePHP (v1.3.2). I set it up on my local wamp server, seems to work fine except the delete() function doesn't work. I'm following t开发者_开发知识库heir blog tutorial exactly, its as simple as it can be so I don't understand why its not working.

Heres the function in my PostsController class:

function delete($id = NULL) {    
    $this->Post->delete($id);    
    $this->Session->setFlash('The post with id: '.$id.' has been deleted.'); 

    $this->redirect(array('action'=>'index')); 
} 

The "Delete" link's url looks like http://localhost/posts/delete/id:1 (where the id number matches the particular post, obviously). It redirects and sets the flash message, however there is no number where $id should be in the message, and the post isn't deleted. It seems the proper id is passed through the url, but I don't think it is getting into the function.

I don't get it. Any ideas???


I would try http://localhost/posts/delete/1 .... At least that was the URLs "shape" that I remember when I used to work in CakePHP. But that was a while ago...

Cheers, Gianluca.


Figured it out, the url was generated improperly. This is a mistake on CakePHP's tutorial.

This is how they suggest you create a link to delete a post:

<?php echo $html->link('Delete', array('action' => 'delete', 'id' => $post['Post']['id']), null, 'Are you sure?' );?>

It should be:

<?php echo $html->link('Delete', array('action' => 'delete', $post['Post']['id']), null, 'Are you sure?' );?>

Notice the difference: the id in the url parameter should not be the key=>value pair 'id' => $post['Post']['id'] but just the value $post['Post']['id'].


Gianluca is right, parameter in the function match the passed args from the url. For example:

if you have something like this:

function my_action($param1=null, $param2=null){
    ...
}

If your url is http://localhost/post/myaction/1/2 then in the function $param1=1 and $param2=2 you can pass as many parameters as you want.

links in CakePHP style should be as you pointed out:

<?php echo $html->link('Delete', array('action' => 'my_action', $param1, $param2)...);?>

If you want to access id:1 then you need to get it from

$this->params['named']['id']

from the controller.

HTH


Do you have override function beforeDelete() in the model? If yes, this function must be return true;

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜