Cake Opérationnel mai je ne trouve pas ce que je veut dans la doc

Par neecride, il y a 9 ans


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

neecride, il y a 9 ans

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.

Kareylo, il y a 9 ans

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();
Kareylo, il y a 9 ans

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.

neecride, il y a 9 ans

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