bonsoir,

Voila j'ai réussit a me dépatouiller un peut Composer ma poser quelques soucis mais ça va !

je teste en ce moment Lara et Cake mai il y a un truc qui me chiffone dans Cake, voila mon controller de test j'ai suivis un peut le tuto déprécier de Grafikart.

Ce que je fais :

namespace App\Controller;

use App\Controller\AppController;

class PostsController extends AppController {

    public function index() {

        $query = $this->Posts->find()
            ->select(['id', 'name', 'content'])
            ->where(['id !=' => 1])
            ->order(['date_post' => 'DESC']);

        //$query = $this->Posts->find('all');

        foreach ($query as $post) {
            debug($post->name);
            debug($post->content);
        }

    }

}

je me suis référé a la doc.

J'ai bien mon article mai le contenu s'affiche au dessus du template et quand je met le foreach dans la vue ça ne fonctionne pas la variable $query n'est pas définie.

Et je ne trouve rien dans la doc je ne sais pas où chercher le jargon me pose problème aussi je ne comprend rien a ce qu'il raconte.

et enfin le model :

<?php

namespace App\Model\Table;

use Cake\ORM\Table;

class PostsTable extends Table {

}

il sert a quoi ?

Voila j'en ai fini pour le moment :) thank

4 réponses


Kareylo
Réponse acceptée

C'est normal que tes données sont au dessus de ton contenu, tu le débug dans le controller, pour les passer à la vue, tu doit utiliser la méthode set() de la façon suivante:

$this->set(['nomVarible', $variable]);

Ou encore

$this->set(compact($variable));

De plus, ton idée d'utiliser le find('all') est plus appropriée dans le controller.

Kareylo
Réponse acceptée

Dans le cas où tu récupère en fonction de l'ID, utilise la méthode get :

$post =  $this->Posts->get($id);
$this->set(['post', $post]);

Ou ajouter à la fin de ta recherche la méthode first();

$post = $this->Posts->find()->where(['id' => $id])->first();
neecride
Auteur

Oui merci depuis j'ai réussi a faire ma page, mais j'ai pas compris pourquoi je dois faire un foreach alors que je ne souhaite que le contenue qui corespond a l'id en get :

  public function single($id) {   

        $post = $this->Posts->find()->where(['id' => $id]);
        $this->set(['post' => $post]);

    }

dons oui ça fonctionne j'ai bien ma vue mai dans un foreach c'est bizzar cette méthode pour un seul résultat.

neecride
Auteur

Et bien oui c'est nettement mieux comme ça merci