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
Auteur
Réponse acceptée

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
}