Bonjour,
Voila je rencontre un petit problème avec le code source de Model View Controller
Je télécharge le code souce,
je créer les tables,
je modifie le code source pour que les tables soiuent prises en compte
faire fonctionner l'exemple donné
Administrer les articles
Ajouter
Notice: Undefined variable: posts in /Applications/MAMP/htdocs/Model-View-Controller/app/Views/admin/posts/index.php on line 16
Warning: Invalid argument supplied for foreach() in /Applications/MAMP/htdocs/Model-View-Controller/app/Views/admin/posts/index.php on line 16
ID Titre Actions
Bonsoir.
Notice: Undefined variable: posts in /Applications/MAMP/htdocs/Model-View-Controller/app/Views/admin/posts/index.php on line 16
L'erreur est plutôt explicite, la variable posts
n'est pas définie et donc la seconde erreur est plutôt évidente.
Il te faut donc vérifier quel nom porte la variable dans laquelle sont stockés les enregistrements récupérées via la base de données.
Sinon, comme le dit Mehdikacim, montres nous le code et plus précisément à partir de la récupération des données.
C'est le code source telechargé de Model View Controller de La POO en PHP chapitre Design Patterns Avancés.
J'ai juste mis mon dbname
public function __construct($db_name = 'mysql:dbname=grafikart;localhost', $db_user = 'root', $db_pass = 'root', $db_host = 'localhost'){
$this->db_name = $db_name;
$this->db_user = $db_user;
$this->db_pass = $db_pass;
$this->db_host = $db_host;
}
private function getPDO(){
if($this->pdo === null){
$pdo = new PDO('mysql:dbname=grafikart;localhost' . $this->db_name . ';host=' . $this->db_host, $this->db_user, $this->db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo = $pdo;
Ce n'est pas ce code là qui va nous aider.
Montres nous la partie dans laquelle tu récupères les enregistrements en base de données, soit normalement l'action index de ta classe PostsController qui se trouve dans le dossier Admin.
Par contre, si tu n'as aucun enregistrement dans la table posts dans ta base de données, il est possible que ce soit dû à ça, tu devrais donc faire la vérification dans l'action du controller, ne transmettre la variable à la vue que si tu as un retour de résultats puis dans la vue, si la variable $posts
n'est pas définie, tu ne fais pas le foreach
.
Voila le code
class PostsController extends AppController{
public function __construct(){
parent::__construct();
$this->loadModel('Post');
$this->loadModel('Category');
}
public function index(){
$posts = $this->Post->last();
$categories = $this->Category->all();
$this->render('posts.index', compact('posts', 'categories'));
}
public function category(){
$categorie = $this->Category->find($_GET['id']);
if($categorie === false){
$this->notFound();
}
$articles = $this->Post->lastByCategory($_GET['id']);
$categories = $this->Category->all();
$this->render('posts.category', compact('articles', 'categories', 'categorie'));
}
public function show(){
$article = $this->Post->findWithCategory($_GET['id']);
$this->render('posts.show', compact('article'));
}
}
hello
déjà : est ce que tu te connectes bien à ta db ? c koi ce ';localhost' ds ton db_name ?
ensuite, ce n'est pas du php de débutant ;) c une syntaxe qui ressemble bcp à laravel, du moins avec bcp d'appel de class d'un framework...
c koi ton contexte ?
Salut,
Dans la méthode getPDO()
, tu concatènes $this->db_name
avec 'mysql:dbname=grafikart;localhost', ce qui fait que si tu précises la valeur de $db_name à l'instanciation de la classe, tu auras un paramètre de connexion erroné. Du coup tu ne pourras pas récupérer de nouvelle instance de PDO.
Est-ce que tu as compris ce que tu as écris ou tu as juste recopié bêtement ?
Salut,
Merci @betaweb, j' ai vu ou il faut que j'initialise la bdd, j' ai corrigé et init le code suivant dans config.php :
<?php
return array(
"db_user" => "root",
"db_pass" => "root",
"db_host" => "localhost",
"db_name" => "grafikart"
);
Pour répondre à ta question c'est sur les conseils de mon enseignant que j'ai repris ce code .
Mais j'ai toujours la même erreur.
Donc c'est que tu ne comprends pas ce que tu fais.
Quelle version de PHP utilises-tu ?
Peux-tu nous montrer la méthode loadModel()
?
Fais aussi un var_dump
de la variable $posts
dans ton posts/index.php
et colle nous le résultat.
Vérifies aussi la casse de tes tables et de tes noms de classes.
public function __construct($db_name, $db_user = 'root', $db_pass = 'root', $db_host = 'localhost'){
$this->db_name = $db_name;
$this->db_user = $db_user;
$this->db_pass = $db_pass;
$this->db_host = $db_host;
}
private function getPDO(){
if($this->pdo === null){
$pdo = new PDO('mysql:dbname=' . $this->db_name . ';host=' . $this->db_host, $this->db_user, $this->db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo = $pdo;
}
return $this->pdo;
}
Version php 7.0.12
<?php
namespace App\Controller;
use Core\Controller\Controller;
use \App;
class AppController extends Controller{
protected $template = 'default';
public function __construct(){
$this->viewPath = ROOT . '/app/Views/';
}
protected function loadModel($model_name){
$this->$model_name = App::getInstance()->getTable($model_name);
}
}
Notice: Undefined variable: posts in /Applications/MAMP/htdocs/Model-View-Controller/app/Views/posts/index.php on line 3
NULL