Bonjour à tous,

En développant une petite application pour la gestion de magasins, je rencontre un petit problème. Je vous explique rapidement le contexte : j'ai un magasin de fleur à paris et un magasin de fleur à marseille, quand j'arrive sur l'application je me logue, et selon ou je me trouve dans l'application, je veux pouvoir gérer paris ou marseille (car tout se gère pareil).

Je cherche donc actuellement à intégrer un mini formulaire (liste déroulante) au sein de mon header : une petite liste déroulante avec "Paris" et "Marseille", un petit bouton OK, et paf ça sauvegarde en session le nom de la ville courante.

Je suis parvenu à intégrer un formulaire de ce type dans mon header (fichier default.ctp)

<?php echo $this->Form->create(null, array('url' => array('controller' => 'cities', 'action' => 'citycession'))); ?>
            <?php 
            $options = array();
            foreach($Cities as $city)
            {
                $options] = $city;
            }
            echo $this->Form->select('ville', $options, null, array('escape' => false));
            echo $this->Form->end('OK'); ?>

Et dans mon controller la fonction citycession :

function citycession(){
        $c = $this->City->find('all');
        $this->set('citycession',$c);
        if(isset($this->data)){
            $id = $this->data'City']'ville'];
            $this->Session->delete("ville-courante");
            $this->Session->delete("ville-courante-id");
            $this->Session->write("ville-courante", $c$id]'City']'name']);
            $this->Session->write("ville-courante-id", $c$id]'City']'id']);
            $this->redirect(array('controller' => 'pages', 'action' => 'home'));
        }
    }

=> Lorsque je me trouve sur une page du style monSite/pages/truc => cela FONCTIONNE
=> Lorsque je me trouve sur une page autre que ../pages/ => cela ne fonctionne pas et me retourne 3 undifned index et un cannot modify error information.

Je pense avoir presque trouvé le problème en ayant constaté que cela ne fonctionnait pas dès que je n'étais pas dans ../pages/.. , mais je n'ai toujours pas corrigé la chose, si quelqu'un avait une idée, merci ^^

Bonne journée

11 réponses


Billou
Auteur
Réponse acceptée

Et voilà c'est résolu, cela venait bel et bien de la création de mon formulaire, j'ai remplacé ce code :

echo $this->Form->create(null, array('url' => array('controller' => 'cities', 'action' => 'citycession')));

par celui-ci

echo $this->Form->create('City', array('action' => 'citycession'));

Et le problème ne se pose plus. Merci à toi palmero8, le fait d'avoir trifouillé avec le requestAction m'a fait trouvé une autre solution ^^

T'as essaié d'utiliser requestAction ?

Billou
Auteur

RequestAction me permettrait de faire quoi au juste ? De ce que je comprends dans la doc, je pourrais faire une sorte de "select" avec ce RequestAction ... j'ai du mal à voir ou ça se situe pas rapport à mon problème. Je vais continuer de chercher tout de même

D'ou viens ta variable cities ?

Billou
Auteur

Ah oui pardon j'ai oublié de le préciser : elle vient de mon app_controller dans un beforeRender :

$this->set('Cities', $this->City->selectCity());

J'ai également dans le app_controller (je sais pas si ca peut être utile) en haut :

var $uses = array('City');

Et dans le modèle city j'ai ça :

function selectCity(){
        return $this->find('list',array(
            'fields'=> array('name')
        ));

    }

Il faut savoir utilisé la doc de CakePHP.

requestAction = This function calls a controller's action from any location and returns data from the action.
On ne peut pas faire plus clair :)

Plus de détails

Billou
Auteur

Oui merci je me suis bien référé à cet article du book (et si je ne me trompe pas je ne peux pas m'en servir au sein d'un formulaire), car dans ce même "book", partie formulaire, je ne vois pas comment appeler ce requestAction.

En plaçant le requestAction au-dessus de ton form. Je suis pas un expert mais sa devrais fonctionner.

Ca fonctionne ?

Billou
Auteur

[Edit]
J'ai essayé de faire comme tu dis :

$test = $this->requestAction('/cities/citycession');
echo $this->Form->create(null, array('url' => $test));

=> Mais du coup ça ne fonctionne plus, il ne rentre plus dans le "if isset($this->data)" du contrôleur.
=> le POST se fait sur le controlleur courant et non sur le controlleur indiqué dans le form(comme si le requestAction ne marchait pas finalement)

Etrange ... je continue de chercher ^^

Billou
Auteur

Pour en revenir à mon problème initial (avec le code donné tout en haut), lorsque je débugue sous firebug, onglet réseau et quand je clique sur le post, en fait il se fait au bon endroit lorsque je me trouve sur une /pages (du coup dans les paramètres de Post j'ai bien "data[City][ville]" avec 1 résultat, et dès que je suis dans un autre controlleur au sein de mon application, le Post devient data[ControlleurCourant][ville], et donc 0 résultat + le "Undefined index: City" dans cities_controlleur.