[cakephp]Liens en methode POST – fr

Le problème :

Cakephp creer des liens hypertext seulement avec la méthode GET. Bien sûr ce n’est pas la meilleur moyen lorsqu’il s’agit d’effacer une ressource (dans la base de donnée), cela devrait être réaliser depuis un méthode POST.

Comment faire

En fait on va creer un formulaire avec un peu de javascript :
Effacer

Lorsque l’utilisateur confirm l’action, cela creer le formulaire qui sera envoyé à l’application.

Dans CakePhp

Helper

J’ai choisis de créer un helper personnalisé qui utilisera celui par défaut, $html->link :
//file: app/views/helpers/html2.php
class Html2Helper extends Helper {
//permet d’utiliser l’helper Html
var $helpers = array(‘Html’);

function link($title, $url = null, $htmlAttributes = array(), $confirmMessage = false, $escapeTitle = true, $return = false) {
//On ajoute le formulaire seulement si confirmMessage est présent:

if ($confirmMessage) {
$confirmMessage = str_replace("’", "\’", $confirmMessage);
$confirmMessage = str_replace(‘"’, ‘\"’, $confirmMessage);
//on ajout le post
$htmlAttributes['onclick']="if (confirm(‘$confirmMessage’)) { var f = document.createElement(‘form’); f.style.display = ‘none’; this.parentNode.appendChild(f); f.method = ‘post’; f.action = this.href;f.submit(); };return false;";
}
//Et on utilise l’helper de base
$output = $this->Html->link($title, $url, $htmlAttributes, null, $escapeTitle, $return);
return $this->output($output, $return);
}
}
?>

Utilisation : View

On peut donc inserer dans n’importe quelle vue. Il ne faut pas oublier de l’importer dans le controller. Le message de confirmation est obligatoire :

link(‘post link’, ‘/pages/index’, null, ‘Es-tu sûr?’); ?>

Controller

Importer l’helper et verification: :
//file: app/controller/pages_controller.php

class PagesController extends AppController {

var $name = ‘Posts’;
//hell yeah!
var $helpers = array(‘Html2′);
//le composant de requetes
var $components = array(‘RequestHandler’);

function index(){
//Si la requete est en POST : renvoie vrai
if($this->RequestHandler->isPost())
debug(‘request is post’);
else
debug(‘request is not post T_T’);
}
}
?>

Et après …

On peut modifier ces scripts pour rentrer dans les bonnes grâces d’applications RESTful : PUT, DELETE.

This entry was posted in Cakephp. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>