formation poo

Par DJOSNEVIE, il y a 9 ans


Bonjour à tous,

je suis au 18éme partie de la formation sur la poo et je recontre un probleme avec mon code.
quand je fait ça sur la class table:

public function query($statement, $attributes=null, $one=false{ if($attributes){ $this->db->prepare($statement, $attributes, str_replace("Table","Entity", get_class($this)), $one); }else{ $this->db->prepare($statement, str_replace("Table","Entity", get_class($this)), $one); } }

et sur ma page home j'ai une erreur qui s'affiche en disant qu'il ne trouve pas la classe ArticleEntity sur App\Table\ArticleEntity parce que la classe PostEntity moi je le nommé ArticleEntity et je suis bloqué je ne sait pas comment evolué.

Merci d'avance sur vos reponses!

11 réponses

SLK, il y a 9 ans

Salut,

Peut-être un problème de namespace.

Montre nous la fonction prepare pour voir ?

Avec aussi les 1ères lignes du fichier "MysqlDatabase.php"
(au moins tout ce qu'il y a avant le mot-clé "class", et cette même ligne aussi)

Et de la même façon :
les 1ères lignes du fichier "Table.php",
les 1ères lignes du fichier "PostTable.php",
les 1ères lignes du fichier "Entity.php",
les 1ères lignes du fichier "PostEntity.php".

DJOSNEVIE, il y a 9 ans

Table.php

namespace core\table; class Tables{ protected $table; protected $db; public function __construct(\core\database\MysqlDatabase $db){ $this->db=$db; if (is_null($this->table)) { $part=explode('\\', get_class($this)); $class_name=end($part); $this->table=strtolower(str_replace("Table", "", $class_name)); } } public static function getInstance(){ return new Tables(); }

le fichier PostTable moi je le nommé ArticleTable voici aussi son code

<?php namespace app\table; use core\table\Tables; class ArticleTable extends Tables{ public function last(){ return $this->query(" SELECT articles.id, articles.titre, articles.contenu, articles.date, categories.titres as categorie FROM articles LEFT JOIN categories ON categorie_id= categories.id ORDER BY articles.date DESC "); } }

le fichier Entity je l'ai pas créer je pas trouver bon de le faire et le fichier PostEntity je le nommé aussi ArticleEntity voici aussi son code

<?php namespace app\Entity; class ArticleEntity{ public function getUrl(){ return "index.php?p=single&id=".$this->id; } public function extrait(){ $html="<p>".substr($this->contenu, 0, 450)."</p>"; $html.='<p><a href="' . $this->getURL() . '">voir la suite</a></p>'; return $html; } }

et je pas aussi voulu de faire la methode magic dans le fichier ArticleEntity j'appel directement la fonction dans la page home

betaWeb, il y a 9 ans

Salut,

Ta classe s'appelle ArticleEntity et non PostEntity ça vient sûrement de là ;)
Renomme ta classe et ton fichier correctement, et accorde toi sur les noms.

DJOSNEVIE, il y a 9 ans

bon c moi qui est commis une erreur quand je essayer d'ecrire mais voici l'erreur que je reconte :

Warning: require(C:\xampp\htdocs\Refactoring\app/table/ArticleEntity.php): failed to open stream: No such file or directory in C:\xampp\htdocs\Refactoring\app\autoloader.php on line 17

Fatal error: require(): Failed opening required 'C:\xampp\htdocs\Refactoring\app/table/ArticleEntity.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\Refactoring\app\autoloader.php on line 17

Carouge10, il y a 9 ans

Il me semble à moins que je me trompe, que la ArticleEntity extends de Entity ?
Et la il cherche ArticleEntity dans le dossier table, ne devrait-il pas se trouver dans le dossier Entity ?

DJOSNEVIE, il y a 9 ans

Carouge10 je pas vraiment compris votre reponse

Thomas Chicheportiche, il y a 9 ans

Ton appli cherche le ArticleEntity dans le namespace App/Table au lieu de App/Entity.

DJOSNEVIE, il y a 9 ans

oui et je ne comprend pas ça

Thomas Chicheportiche, il y a 9 ans

Peux-tu nous montrer ton fichier autoloader.php?

DJOSNEVIE, il y a 9 ans

pour app

<?php namespace app; class autoloader{ static function register(){ spl_autoload_register(array(__CLASS__, 'mon_autoload')); } static function mon_autoload($class_name){ if(strpos($class_name, __NAMESPACE__.'\\')===0){ $class_name= str_replace(__NAMESPACE__.'\\', '', $class_name); $class_name= str_replace('\\', '/', $class_name); require __DIR__."/".$class_name.'.php'; } } } ?>

pour core

<?php namespace core; class autoloader{ static function register(){ spl_autoload_register(array(__CLASS__, 'mon_autoload')); } static function mon_autoload($class_name){ if(strpos($class_name, __NAMESPACE__.'\\')===0){ $class_name= str_replace(__NAMESPACE__.'\\', '', $class_name); $class_name= str_replace('\\', '/', $class_name); require __DIR__."/".$class_name.'.php'; } } } ?>
saibe, il y a 9 ans

hello,
2 class autoloader ? possible mais.......
tu pourrais envoyer la hierarchie de ton app ? genre :

/app |- core | |-autoloader.php |-app | |-autoloader.php ...