Bonjour, Je ne suis pas un expert avec CakePhp, mais il me semblait avoir bien compris le FrameWork ! Or depuis ce matin, je n'arrive pas à résoudre un problème qui paraît simple, voici comment s'organise mes pages: PagesController * : Index(); concept(); partenaires(); medias(); admin_concept(); admin_partenaires(); admin_medias();** *présent par défaut dans le FrameWork) Mes pages sont enregistrées dans une table Page ! Cependant, je n'arrive pas à exécuter la requête pour les actions sans le préfixe Admin !! Alors que les requêtes s’exécutent bien dans les actions préfixée avec admin, pour celle sans préfixe mon debug renvoie : (default) 0 query took msNrQueryErrorAffectedNum. rowsTook (ms) ! Je n'arrive pas à saisir pourquoi !? Si quelqu'un a une piste je suis preneur ! Mille mercis ! smile Voici les codes de mes pages : **PagesController** : [code]<?php /**

  • Static content controller.
  • This file will render views from views/pages/
  • PHP 5
  • CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
  • Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  • Licensed under The MIT License
  • For full copyright and license information, please see the LICENSE.txt
  • Redistributions of files must retain the above copyright notice.
  • @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  • @link http://cakephp.org CakePHP(tm) Project
  • @package app.Controller
  • @since CakePHP(tm) v 0.2.9
  • @license MIT License (http://www.opensource.org/licenses/mit-license.php)
    */
    App::uses('AppController', 'Controller');

class PagesController extends AppController {
public $scaffold;
public function beforeFilter(){
parent::beforeFilter();
$this->Auth->allow(); } public $name = 'Pages'; public $uses = array(); // Index public function display() { $path = func_get_args(); $count = count($path); if (!$count) { $this->redirect('/'); } $page = $subpage = $title_for_layout = null; if (!empty($path[0])) { $page = $path[0]; } if (!empty($path[1])) { $subpage = $path[1]; } if (!empty($path[$count - 1])) { $title_for_layout = Inflector::humanize($path[$count - 1]); } $this->set(compact('page', 'subpage', 'title_for_layout')); $this->render(implode('/', $path)); } // Pages publics public function concept() { $this->Page->findById(1); $error="ahah"; $this->set(compact('results','error')); } public function partenaires() { $results=$this->Page->findById(4); $this->set(compact('results')); } public function medias() { $results=$this->Page->findById(5); $this->set(compact('results')); } //Admin_index public function admin_index(){ } public function admin_concept() { $results=$this->Page->findById(1); $this->set(compact('results')); var_dump($results); } public function admin_partenaires() { $results=$this->Page->findById(4); $this->set(compact('results')); } public function admin_medias() { $results=$this->Page->findById(5); $this->set(compact('results')); } }[/code] **Modèls :** **Page :** [code]Code: php class Page extends AppModel{ }[/code] **Views:** **concept/ admin_concept / medias / admin_medias / partenaires / admin_partenaires :** [code]<?php foreach($results as $k => $result) :?>

= $result['name'];?>

= $result['content'];?> <?php endforeach;?>[/code] PS : même la variable error n'est pas envoyé à la vue ! Quelque chose m'échappe ça m'agace !!!!!

6 réponses


Lartak
Réponse acceptée

Bonjour.
Sur le forum CakePhp quelqu'un pense que ça vient du model et controller PagesController qui doit contenir que des pages statiques et n'exécute du coup aucune requête.
Absolument pas, le controller Pages n'est pas différent des autres.
Déjà, dans ta fonction concept, tu ne définis pas ta variable results, ce n'est donc pas étonnant qu'elle soit vide.
Ensuite, à quoi te sert un foreach , alors que tu ne fais des requêtes que pour retourner un seul enregistrement dans toutes tes fonctions ?
findById() , ne te renverra jamais plus d'un seul enregistrement, donc ton foreach est totalement inutile.
Pour finir, est-ce que tu as activé le prefixe admin dans ton fichier bootstrap.php ?
@Romano83 : Salut, ton problème vient certainement du fait que tu mettes ceci dans ta fonction beforeFilter, tu fais erreur, il n'a absolument pas besoin de ça, tant qu'il n'utilise pas le composant Auth, son problème ne peut donc pas venir de ce que tu dis.

Romano83
Réponse acceptée

@Lartak11 : effectivement, j'ai dis n'importe quoi... Merci de m'avoir corrigé pour le coup ;)

Salut, ton problème vient certainement du fait que tu mettes ceci dans ta fonction beforeFilter :

public function beforeFilter(){
        parent::beforeFilter();
        $this->Auth->allow();
    }

Il faut que tu définisses le nom des actions dans ton composant Auth si tu utilises le scaffolding comme dans ton cas ( Documentation).

@Romano83, désolé le scaffolding était un test, je ne l'utilise pas j'ai oublié de l'enlevé du code avant de vous l'envoyer ^^ J'ai essayé de définir les actions , ceci ne change rien. [code$this->Auth->allow('concept', 'index');[/code] Sur le forum CakePhp quelqu'un pense que ça vient du model et controller PagesController qui doit contenir que des pages statiques et n'exécute du coup aucune requête. J'essaie en le faisant dans autre model/controller.

Merci, problème résolu !
J'avais laissé le système de route par défaut de CakePhp

/**
 * ...and connect the rest of 'Pages' controller's urls.
 */
    Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

@Lartak11 Il Merci pour ta réponse !
Effectivement, le controller pages n'est pas différent.

Oui j'ai oublié de déclaré results dans concept, mais je ne testais pas sur cette page ^^ et pour le foreach, j'ai corrigé, j'ai fait un copié collé d'un bout de code dans ma vue, j'ai corrigé, j'ai tout remis au propre.
Et oui, j'ai activé le préfixe admin ! Tout est opérationnel, j'ai juste supprimé le système de Routes par défaut et maintenant mes requêtes s'effectuent. :)

J'avoue que j'ai pas totalement compris pourquoi :)