Bonjour à tous, je ne sais pas si cette question à déjà été poser mais je tente quand même.

Je tente de créer un formulaire mais avec le pattern MVC en utilisant des CLASSES et des FONCTIONS (le tout en PHP).

Voici comment j'ai mis en place ma structure :

Une classe Article qui fait partie du modèle :
[code=php]<?php
class Article{
 
    private $id;
    private $titre;
 
    function __construct($titre=null, $id=null) {
        $this->id = $id;
        $this->titre = $titre;
    }
 
    public function getId() {
        return $this->id;
    }
 
    public function setId($id) {
        $this->id = $id;
    }
 
    public function getTitre() {
        return $this->titre;
    }
 
    public function setTitre($titre) {
        $this->titre = $titre;
    }
}
?>
[/code]

Dans mon dossier controller j'ai une classe singleton qui me permet de faire une connexion à la bdd et une autre classe :

classe article :
[code=php]
<?php
require_once 'class.singleton.php';
require '../model/class.article.php';
 
class ManageArticle{
 
 
    public static function add(Article $article)
    {
        $connexion = Singleton::getInstance();
        $sql =$connexion->prepare("insert into article(`titre`) VALUES ('".$article->getTitre()."')");
        $sql->execute();
        $article->setId($connexion->insert_id());
        return true;
    }
 
 
   public static function getAll()
   {
        $connexion = Singleton::getInstance();
        $ress = $connexion->prepare("select * from article");
        $ress->execute();
        $listArticle = array();
 
        foreach ($ress as $value) 
        {
            $listArticle[] = new Article($data['titre'],$data['id_article']);
        }
 
        return $listArticle;
    }
}
?>
[/code]

Mon problème est le suivant :

Lorsque je fait appel à ma fonction ADD() et à la fonction getALL() je reçois une erreur me disant que la fonction add n'existe pas.

Fatal error: Call to undefined function add() in C:\wamp\www\MVC_FORM\view\liste.php on line 5

Voici le code ou se situe l'erreur en question :


<?php
require_once"../controller/control.article.php";
 
$ajout = new ManageArticle();
add($ajout);
 
 
$fonction = ManageArticle::getAll();
 
 
echo "<pre>";print_r($ajout);
echo "<pre>";print_r($fonction);die;
 
?>


Merci de votre aide et de vos réponses
ManageArticle::add($ajout);

au lieu de

add($ajout);


Tu as juste oublié la classe avant la méthode "add" ^^ Et donc il cherchait une fonction (qui n'existait pas).
Modérateur
Salut

Palerm0_57 a écrit :
.... Une classe Article qui fait partie du modèle :
<?php
class Article{ 
    /*....*/
}
?>



Logiquement je devrais lire ceci : class Article extends Model. Smiley cligne

mon sentiment sur ce code est qu'il y a de l'idée mais ce n'est pas ça. Tu es encore imprégné du procédural selon moi. Ton code est beaucoup trop rigide et lourd. Je n'ai pas tout lu (ce soir, je suis un peu claqué et j'ai vu du code toute la journée). Je vois des valeurs en dur comme : insert ... Artcle.... Or, ta class est une variable mais à elle même (constante).

echo __CLASS__

;)

Sinon, je vois des require qui n'ont rien à faire là. Je t'invite à te créer un chargement automatique de tes classes. Smiley cligne

Que tu saches la syntaxe objet en PHP, c'est très bien ! Mais si tu ne connais pas bien la philosophie objet, c'est extrêmement mauvais ! Tôt ou tard, tu voudras ajouter ou modifier quelque chose dans ton code... et tu n'auras plus le même esprit lorsque tu as codé ce projet.

Pour conclure, je t'invite à lire de la doc sur l'objet et voir le langage qui s'y cache. Car il y a un vrai langage derrière. Smiley cligne
Modifié par niuxe (02 Jun 2014 - 21:34)