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.
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
}