2010-06-10 7 views
0

Je ne fais que craquer gateauPHP (v1.3.2). Je l'ai installé sur mon serveur wamp local, semble fonctionner correctement, sauf que la fonction delete() ne fonctionne pas. Je suis exactement leur tutoriel blog, c'est aussi simple que possible, je ne comprends pas pourquoi cela ne fonctionne pas.La fonction CakePHP delete() ne fonctionne pas

Heres la fonction dans ma classe 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')); 
} 

L'URL du lien "Supprimer" ressemble http://localhost/posts/delete/id:1 (où le numéro d'identification correspond au poste particulier, évidemment). Il redirige et définit le message flash, mais il n'y a pas de numéro où $ id doit être dans le message, et le message n'est pas supprimé. Il semble que le bon id est passé à travers l'URL, mais je ne pense pas qu'il entre dans la fonction.

Je ne comprends pas. Des idées???

Répondre

2

Je voudrais essayer http://localhost/posts/delete/1 .... Au moins c'était les URL "forme" que je me souviens quand je travaillais dans CakePHP. Mais c'était il y a un certain temps ...

Cheers, Gianluca.

1

À la fin, l'URL a été générée incorrectement. Ceci est une erreur sur le tutoriel de CakePHP.

Voici comment ils suggèrent de créer un lien pour supprimer un message:

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

Il devrait être:

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

Notez la différence: l'identifiant dans le paramètre URL ne doit pas être la clé => valeur paire 'id' => $post['Post']['id'] mais juste la valeur $post['Post']['id'].

+0

en passant également par cet exemple. Quand j'appuie sur delete cela fonctionne et je reçois un message disant qu'il a été supprimé mais il n'a pas été effacé de la base de données. Pouvez-vous vous rappeler si c'est comme ça que ça se passe? Merci – Jonathan

0

Gianluca a raison, le paramètre dans la fonction correspond aux arguments passés depuis l'URL. Par exemple:

si vous avez quelque chose comme ceci:

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

Si votre URL est http://localhost/post/myaction/1/2 alors dans la fonction $ param1 = 1 et param2 $ = 2 vous pouvez passer autant de paramètres que vous le souhaitez.

liens dans le style CakePHP devraient être comme vous l'avez:

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

Si vous voulez accéder id: 1 alors vous devez obtenir de

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

du contrôleur.

HTH

0

Avez-vous override function beforeDelete() dans le modèle? Si oui, cette fonction doit être return true;

Questions connexes