Je ne sais pas si ce que je fais est la meilleure des solutions, en tout cas ça marche plutôt bien. Voici la démarche que je suis :
Dans une feuille javascript
//event qui se déclenche quand tu appuies sur ton bouton
$('.ajaxInput').click(function() {
//2 formats possible pour l'envoi des données
//data: { name: "John", location: "Boston" } (= format JSON)
//data: "name=John&location=Boston"
var data; //a toi de récupérer les valeurs où tu veux
var url = $(window.location).attr('href');
//si tu veux éviter d'avoir de multiples requêtes en parallèle tu arrêtes la requête précédente avec cette ligne
//ça évite les problèmes si quelqu'un clique comme un bourrin sur le bouton
if(xhr) xhr.abort();
//requete ajax
xhr = $.ajax({
type: "POST",
url: url,
data: data,
success: function(responseFromServer, textstatus, jqXHR) {
//ici tu remplaces ajaxOutput par la balise dans lequel se trouve ton voyant, c'est là que va s'afficher ton voyant
$('.ajaxOutput').html(responseFromServer);
}
});
Une fois que tu as ce code le traitement dans ton controller va s'effectuer.
MonController.php
//dans le before filter on supprime l'affichage du layout par défaut cela permet de rafraichir un seul élément de ta page au lieu de tout rafraichir
public function beforeFilter(){
parent::beforeFilter();
if($this->request->is('ajax'))
$this->layout = null;
}
public function laFonctionCorrespondantALaPageEnCours(){
//if permettant de faire un traitement spécifique suite à ta requête ajax
if($this->request->is('ajax'){
//traitement qui correspond à ta requete, this->request->data contient tes data
//genre $color = vert ou $color = rouge et $this->set(compact('color'));
//puis renvoie de l'élement que tu veux rafraichir
$this->render('/Elements/tonIconelumineux');
}
}
J'espère que cela t'aidera !
Bon courage :)