Pb Session->setFlash()

Par Daff, il y a 13 ans


Bonjour,
je débute sur CakePHP et suis en train de faire les très bon tutos du site. Je suis sur Création d'un blog, les commentaires.
J'ai un petit soucis. Voilà, à la toute fin du tuto on ajoute des messages d'infos avec $this->Session->setFlash() , mais chez moi j'obtiens un message d'erreur

Error: Call to a member function setFlash() on a non-object
File: /Library/WebServer/Documents/blog/app/Controller/PostsController.php
Line: 154

J'ai beau vérifier, je ne comprends pas. Je précise que je suis sous CakePHP 2.x et que le $this->Session->setFlash() fonctionne correctement aux autres endroits de mon code (autres méthodes dans le même Controller).

Voici mes sources si cela peut aider

PostsController.php
Voici la méthode incriminée

function voir($id=null)
{
    if(!empty($this->data)) //..... Si des donnees ont etes postees (ici un commentaire, alors on les sauvegarde.
    {   
        $this->Comment->set($this->request->data);
        if ($this->Comment->validates())
        {
            if($this->Comment->save($this->data))
            {
                $this->Session->setFlash("Votre commentaire bien été posté.");
            }
        }
        else
        {
            $this->Session->setFlash("Veuillez vérifier les informations que vous avez entré."); // ---> Ceci est la ligne 154 en question
            $errors = $this->Comment->validationErrors;
        }
        }
    // ... reste du code
}

/View/Layout/default.ctp
Voilà ce que j'ai mis dans ce fichier

<!-- ... ici du code HTML ou PHP -->
<div>
    <?php
    echo $this->Session->flash('auth');
    echo $this->Session->flash();
    ?>
</div>
<!-- ... ici encore la suite du code HTML ou PHP -->

Si vous voyez mon erreur, je suis preneur.

D'avance merci à la personne qui me débloquera. Je continue de chercher.

1 réponse

Daff, il y a 13 ans

Bon bah ce fût bref. En cherchant avec notre ami Google, j'ai trouvé l'erreur donc pour ceux que cela intéresse:

Pour faire simple dans le tuto précédent
on avait ajouté le composant SecurityAuth avec la ligne suivante:

Fichier AppController.php

class AppController extends Controller
{
    var $components = array('Auth');
    //... reste du code
}

Ceci fonctionnait bien pour le $this->Session->flash('auth') , mais après vérification rendait obsolète le second $this->Session->flash() dans /View/Layout/default.ctp.
L'erreur vient du fait que dans CakePHP 2.x, peut-être en dessous (A confirmer), le composant Session n'est pas inclus de base. Du moins en ajoutant le composant Auth , on a ecrase le tout.
Afin de resoudre le probleme, il suffit d'inclure le composant Session dans AppController.

Fichier AppController.php

class AppController extends Controller
{
    var $components = array('Auth', 'Session');
    //... reste du code
}