Bonjour,
Je rencontre un problème sur CakePHP 3, j'essaie de créer un panel admin mais je suis perdu, en gros je voudrais créer les pages qui vont gérer les modules, comme par exemple la page News, qui permettrait de gérer des articles, et moi je voudrais créer un module qui serait pareil que les news qui s'apellerait "Réalisations". Cependant je rencontre un problème, j'ai un controller nommé "AdminController" qui regroupe toutes mes fonctions sur la page admin, le login, le logout de l'admin.. et surtout la fonction adminRealisations() qui me permet d'accéder à la page des mes réalisations.
Je souhaite afficher la liste de mes réalisations depuis ma base de données, alors je créé une entity Realisations.php et une table RealisationsTable.php, je ne change rien parce que je les ai créé en faisant "cake/bin bake model Realisations" donc ça génère les trucs automatiquement.
Dans mon AdminController.php, j'ajoute donc la fonction adminRealisations() comme dit plus haut, avec à l'intérieur :

public function adminRealisations()
{
    $this->set('authUser', $this->Auth->user());

    $realisations = TableRegistry::get('Realisations');
    $realisation = $realisations->find('all');
    foreach ($realisation as $row) {
    }
    $realisation->hydrate(false);

    $this->set('realisations', $row);
    $this->set('_serialize', ['realisations']);
}

(J'ai adapté ce code avec l'aide de la doc de CakePHP)

Dans ma vue :

<div class="gs__admin-container">
    <h1>Liste des réalisations</h1>
    <?php
    foreach ($realisations as $row) {
        echo $realisations->content;
    }
    // Je teste quel résultat est affiché
    echo "--<br/>";
    echo $realisations->content;
    ?>
</div>

Donc lors du test, j'arrive sur la page /admin/admin-realisations qui marche bien, mais le problème est que le foreach ne marche pas et ça n'affiche que le résultat du dessous, qui n'affiche qu'un résultat et en plus de ça pas le bon résultat que je voulais. (Un screenshot parce que j'explique mal).

J'espère que vous aurez compris mon problème et Merci d'avance !

5 réponses


Lartak
Réponse acceptée

Bonjour.
N'utilises pas la méthode hydrate et puis dans ton foreach, il te faut utiliser la variable $row, soit :

foreach ($realisations as $row) {
    echo $row->content;
    // etc ...
}

Au cas ou tu ne le saches pas, tu peux utiliser un prefix Admin par exemple, ce qui pourrait de donner une architecture de ce genre :

  • Controller (dossier)
    == Public ==

    • AppController

    • PostsController

    • RealisationsController

    • etc ...

    • Admin (dossier)
      == Administration ==

      • AppController (controller parent de tous ceux qui suivent)
      • PostsController
      • RealisationsController
      • (etc ...)

Car mettre toutes actions d'administrations dans un seul controller, au bout d'un moment tu auras un fichier hyper long et le fait d'utiliser ce genre de structure, te permettra par exemple de définir dans AppController du namespace Admin que seul ceux qui par exemple ont un role spécifique, sont autorisées à accéder à ses controller enfants en les faisant étendre de celui-ci.
Par contre, quel est l'intérêt du foreach dans ton action du controller, vu qu'à priori tu n'y fait rien ?
Et si tu veux nous montrer des images, utilises les liens qu'ils te proposent, il te fallait choisir Markdown, ce qui donne :

c'est normal que tu ait ce résultat moi je ferai ceci:

public function adminRealisations()
{

    $authUser = $this->Auth->user();
    $realisations = TableRegistry::get('Realisations');
    $realisations = $realisations->find('all');

    $this->set(compact('authUser','realisations'));
    $this->set('_serialize', ['realisations']);
}

et dans ma vu ceci:

<div class="gs__admin-container">
    <h1>Liste des réalisations</h1>
    <?php    foreach ($realisations as $row) : ?>
    //j'affiche mes résultars avec le formatage en html
      <?=   $realisations->content;?>
    <?php endforeach; ?>
    <?php unset($realisations); ?>
</div>

@romses: Tu dis un peu n'importe quoi là, tu montres la même erreur que lui.
Quand tu fais un foreach, pour utiliser l'entité, tu dois utiliser la variable qui se trouve après le as et non avant.
De toute façon, ça fait quasiment un mois qu'il n'a pas répondu une seule fois à son sujet.

Merci c'est trop vite passé Lartak, dans la précipitation je voulais dire le

<div class="gs__admin-container">
    <h1>Liste des réalisations</h1>
    <?php    foreach ($realisations as $row) : ?>
    //j'affiche mes résultars avec le formatage en html
      <?=   $row->content;?>
    <?php endforeach; ?>
    <?php unset($realisations); ?>
</div>
F3LENYR
Auteur

Salut, désolé je m'était pas connecté depuis ^^'
Problème résolu, merci de votre aide @Lartak @romses ! :)