IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

Developpement de projet PHP / MVC / Objets


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut Developpement de projet PHP / MVC / Objets
    Bonsoir à tous !

    Après moultes recherches sur la possibilité de concevoir une application PHP en POO, le tout sous un modèle MVC, j'en viens à vous. N'ayant pas trouvé satisfaction à ma recherche, je vous présente ma requête. Mais tout d'abord, une explication sera la bienvenue.

    Il s'agit de développer un CMS, tout d'abord. Ce dernier présentant les mêmes fonctionnalités que les CMS les plus connus. Pour ce faire, je compte travailler avec la conception du MVC. Je ne dirais pas que pour ce point, je n'ai pas de soucis, mais je vois et peut mettre cela en place sans réel tracas apparent.

    Toutefois, je me pose une question: comment mettre en ordre mes classes et mes implémentations, afin d'avoir des classes par données (telles que User, Page, ...), qui auront chacune des méthodes élémentaires (et autres spécifiques) telles que load() ou save(). Sachant que le but fondamental de cela est évidemment de permettre à l'objet courant, par exemple un User, d'être chargé, conserver et sauvé au fur et à mesure des actions effectuées sur le site.

    Je pensais, un peu naïvement, à l'Ajax. Est-ce une bonne solution ? N'existe-il pas des concepts ou des méthodes qui m'échappent ?

    Je ne compte pas utiliser de framework pré-conçus, afin d'y inclure le mien (qui se développe au même titre que l'application, donc).

    Auriez vous des articles, tutoriaux, références, livres, ou que sais-je encore qui pourrait m'aider dans mes recherches et développement ?

    En cas, je pense qu'il sera nécessaire de visualiser les dessous des CMS sur lesquels je base mes fonctionnalités afin de visualiser leur mise en place... mais j'ai besoin de plus, encore, je pense.

    Merci d'avance !

    (Et désolé, ce message n'est peut-être pas à la bonne place et est encore assez vague dans la demande, ne sachant réellement pas quoi demander, pour combler ma demande.)

  2. #2
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    As tu envisagé la solution de l'utilisation d'une base de données ?

    J'ai déjà utilisé un CMS , CMS Made Simple, et celui-ci s'appuyait sur une base de données pour persister toutes les informations.

    L'AJAX te permettra seulement de rendre plus dynamique tes pages lors des appels à la base de données

  3. #3
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Ah oui, j'ai oublié de dire. Je base donc mon travail sur du code PHP, lié à une DB MySQL

    Donc, les données seront principalement dans une base de données, oui oui.

    Ma question est principalement de savoir si en ayant (imaginons) ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    class User 
    {
    	private Uid;
        private Nom;
        private Prenom;
     
        function __construct($uid)
    	{
    		// Do Stuff
    		$this->load();
    	} 
     
    	public function load()
    	{
    		// Do Stuff 
    		// [Requete]
    		// Modification des variables d'instances
    	}
     
    	public function save()
    	{
    		// Do Stuff 
    		// [Requete]
    	}
     
    }
    Ainsi, ce que je veux, c'est par exemple lorsque l'utilisateur modifie ses données, et qu'à un moment donné la méthode User::save() est appelée, les données se stockent en DB.

    Alors, jusque là, ce n'est pas bien compliqué. Mais le tout est de se dire que si la personne rafraichit la page, il va évidemment rechargé les données, donc recréer les objets.

    Ce que j'aimerais, c'est par exemple avoir un objet User chargé et qui le reste au fil des pages.

    Ca joue surtout son rôle dans ma classe System, qui effectue à chaque moment un contrôle des fichiers. Je me dis qu'il est inutile de le faire à chaque rafraichissement de page, en fait.

    C'est là qu'intervient mon idée d'implémenter de l'AJAX, mais... j'ai de gros doutes sur le fait que ce soit la solution adapté.

    Je pense que je vais sérieusement me pencher sur l'analyse complète des solutions déjà existantes, ... :/

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Ce que j'aimerais, c'est par exemple avoir un objet User chargé et qui le reste au fil des pages.
    As-tu pensé aux sessions?
    $_SESSION

  5. #5
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Oui, oui.

    En fait, à y repenser, je pense que je veux une chose qui est impossible, réellement. La POO tel qu'on l'a connait via PHP et donc pour le web ne peut, tout simplement, pas être la même que pour une application C#. Il faut donc que j'arrive à scinder les deux branches (j'apprends à peine le C#, et de ce fait, ça me donne parfois des idées (farfelues) pour mon application).

    Du moins, je pense.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Citation Envoyé par Klyne2 Voir le message
    Oui, oui.

    En fait, à y repenser, je pense que je veux une chose qui est impossible, réellement. La POO tel qu'on l'a connait via PHP et donc pour le web ne peut, tout simplement, pas être la même que pour une application C#. Il faut donc que j'arrive à scinder les deux branches (j'apprends à peine le C#, et de ce fait, ça me donne parfois des idées (farfelues) pour mon application).

    Du moins, je pense.
    Si j'ai bien compris tu veux faire de la persistence d'objet.
    Pourquoi ne conserves-tu pas ton object User dans ta session.
    Il sera accessible sur n'importe quelle page.

    A moins que ce que tu veux faire est plus complexe,

  7. #7
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Ah, c'est pas si con que ça tiens...

    ... faudrait que j'y pense, et voir si ça correspond à mon besoin tiens !

  8. #8
    Membre à l'essai
    Profil pro
    Gerant
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Gerant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Euh, la classe que tu décrit c'est la couche modèle d'un framework MVC sans ORM tel que codeigniter.

    Je ne comprends pas bien en quoi ce ne serait pas faisable en PHP, même sans utiliser de framework c'est tout a fait possible.

    Pour ce qui est de l'utilisation de l'ajax tout est possible, mais si tu veux respecter le paradigme MVC, ce qui est une bonne idée, il te faudra créer un controlleur pour ces actions, comme pour une page / formulaire classique.

    Si tu as besoin d'encapsuler de la logique métier je te conseille de le faire dans des librairies/modules/classe/helpers, bref pas dans le modèle.

    Pour ton projet si tu as des contraintes importantes de qualité et de délai de réalisation je te conseille de prendre un framework existant. Tu bénéficiera de la documentation pour te guider dans l'apprentissage du developpement MVC en php.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    ou bien tu sérialise tes objets

  10. #10
    Membre à l'essai
    Profil pro
    Gerant
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Gerant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Kruggs Voir le message
    ou bien tu sérialise tes objets
    Oui ça marche aussi pour gerer la persistence. Il faut juste faire attention lors du refactoring si des propriétés de classe changent, mais avec un bon niveau d'abstraction et les méthodes magiques __sleep et __wakeup tout a fait gerable.

    Les framework integrent ce genre de montage pour les donnes de session stockées dans la bdd. D'autres l'utilisent pour la plupart des classes métiers, comme le framework d'activecollab.

  11. #11
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Oui, oui.

    En fait, à y repenser, je pense que je veux une chose qui est impossible, réellement. La POO tel qu'on l'a connait via PHP et donc pour le web ne peut, tout simplement, pas être la même que pour une application C#. Il faut donc que j'arrive à scinder les deux branches (j'apprends à peine le C#, et de ce fait, ça me donne parfois des idées (farfelues) pour mon application).

    Du moins, je pense.
    Je fais les memes object pattern avec ASP.net et en PHP.

    Que souhaites-tu faire exactement ? Montres-nous l'équivalent c# si tu le souhaites, je te montrerais comment représenter l'équivalent en PHP.

    Ce que j'aimerais, c'est par exemple avoir un objet User chargé et qui le reste au fil des pages.
    Tu peux sérialiser ton objet en session, si ta classe User possède des références, il faudra les reconstruire dans la méthoed magique __wakeup.

    Pour ton projet si tu as des contraintes importantes de qualité et de délai de réalisation je te conseille de prendre un framework existant. Tu bénéficiera de la documentation pour te guider dans l'apprentissage du developpement MVC en php.
    Entièrement d'accord. Le développement d'un CMS prend beaucoup de temps. Autant en amont pour la réflexion autour de l'aspect fonctionnel qu'en aval pour le développement pur. Si tu n'as que peu de temps prend un framework existant, si c'est pour ton développement personnel et ton apprentissage alors lances-toi c'est une très bonne initiative.

  12. #12
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Je vois que le sujet à repris des couleurs aujourd'hui. Autant dire que je dois relire certaines réponses, car trop technique dans certaines phrases (ce qui rend ma compréhension à néant, puisque j'ai du mal à visualiser ce vers quoi je dois aller, cfr le sujet initial de la discussion).

    Je vois souvent la même réponse qui se glisse, "sérialiser les objets". Je vais me renseigner sur ce processus, et voir ce que je peux en tirer.

    Pour répondre à ThomasR, je n'ai pas d'exemple C# à te fournir comme ça. Mais, le but est vraiment de réaliser un gain de performance et de code, dans la vérification des outils qui sont mis en place, et de l'utilisateur courant, par exemple.

    J'aimerais, en réalité, me permettre un pré-chargement et un traitement qui ne se renouvelle qu'en cas de réel besoin [comme le chargement de certaines classes, qui ne devraient changer en cours de route].

    Je sais que le dév d'un framework et donc d'un CMS prend du temps. Et c'est mon défi, ... Je pense qu'en partant d'un framework existant, je perds la notion de recherche, de conception et de dév. propre au CMS en lui-même.

  13. #13
    Membre à l'essai
    Profil pro
    Gerant
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Gerant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Je pense que tu as besoin d'eclaircir quelques points, a commencer par tes besoins : tu as besoin d'un framework pour développer une application CMS ou tu cherches a développer un CMS customisable ???

    Un CMS n'est pas un framework, mais il peut en utiliser un. Un framework est par définition générique et réutilisables dans différents type d'applications.

    Utiliser un framework existant ne fera pas du developpement d'un CMS complet une opération triviale, et ne te privera pas du developpement des fonctionnalitees (minimum gestion de catégories/ d'articles/de fichiers/d'utilisateurs).

    Pour revenir au code il me semble mieux de traiter les problématiques séparément : persistance, design, performance,.. tout ca se traite a des niveaux différents.

    Pour les objets serialisés en session si ça convient bien pour les authentifications et les paramètres utilisateur, ça ne conviendra pas pour d'autres données (pour reprendre l'exemple, les articles et les catégories)...

    Réfléchis bien car développer un framework MVC performant et stable peut être très long et necessite une bonne expérience de PHP et des designs patterns.

  14. #14
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Je cherche à développer un CMS customisable. Celui-ci ayant un framework propre, ou du moins un framework qui n'existe pas encore.

    Après, si vous arrivez à me convaincre que de partir sur un ZendFramework ou un CakePHP, pour l'exemple, ne va rien enlever à la partie développement et ne sera en rien un travail pré-maché (bien que j'en doute), pourquoi pas.

    Mais mon optique est de pouvoir toucher à tout les petits détails que l'on peut avoir, incluant le moindre bug qu'on pourrait avoir ; mais qui serait corrigé dans un framework commun.

    Je veux me donner les moyens d'avoir une partie recherche/conception et développement tout aussi importante, au final,

    Pour l'info, dans mes recherches sur les bouquins intéressants, je retiens ce dernier: Object-Oriented Programming with PHP5, de Hasin Hayder. Il me semble, au vu de sa table des matières, rentré dans ce qui m'intéresse de voir actuellement. Je vais essayer de me procurer et lire cela assez rapidement, avant de continuer et de poser des choix.

  15. #15
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonsoir,

    Tu peux peut-être commencer par faire ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    abstract class myCms_DbObject{
        protected $_fields;
        public function __construct($fields = array()){        
            if(count($fields) === 0)
                $fields['id_'.$this->tableName()] = -1;
            $this->_fields = $fields;
        }
     
        public function save(){
            $tablename = $this->tableName();
            if($this->_fields['id_'.$tablename] === -1)
                $conn->insert($this->_fields, $tablename);
            else
                $conn->update($this->_fields, $tablename);
        }
     
        public function delete(){
             $conn->delete($this->_fields, $this->tableName());
        }
     
        public static function fromId($id, $tablename){
            $conn = myCms_Conn::instance();
            $query = $conn->query('select * from `'.$conn->escape($tablename).'`');
            if($conn->numRows($query) > 0){
                 $obj = new 'myCms_'.$tablename($conn->fetchArray($query));         
            }
            return;
        }
     
        public function __get($key){
            return isset($this->_fields[$key]) ? $this->_fields[$key] : null;
        }
     
        abstract public function tableName();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    class myCms_user extends myCms_DbObject {
        private $_userType;
        public function __construct($fields = array()){
            parent::__construct($fields);
        }
     
        public function getType(){
            if($this->_userType === null)
                 $this->_userType = myCms_userType::fromId($this->id_user_type);
            return  $this->_userType;
        }
     
        public function tableName(){
            return 'user';
        }
    }
    J'ai écrit le code à la va-vite sans testé donc à ne pas copié collé (ou presque).

    Comme tu le vois j'utilise un object conn, tu peux imaginer une classe myCms_Conn qui pourrait posséder un membre privé "$_interface" qui correspond au type de base de données utilisée. L'interface choisie devra implémenter l'interface myCms_IConn...

    Ensuite tu sembles vouloir utiliser des évenements, les évenements n'existe pas concrètement comme éléments de langage en PHP, mais tu peux reproduire un fonctionnement relativement similaire avec Design Pattern observateur aidé de la Standard PHP Library (SPL). C'est très bien expliqué sur l'article de Julien Pauli http://julien-pauli.developpez.com/t.../observer-spl/

    Pour les modules, tu peux imaginer une classe abstraite dont hériterais les les modules. Chaque module est stocké dans un dossier (/system/modules/). Les modules pourrait s'attacher sur des évenements afin de générer du contenu, ou l'altérer.

    Concernant la gestion des documents on peut faire du tout ou rien. Un CMS c'est complexe, tu dois d'abord réfléchir à ce que tu souhaites. Tout est faisable (quasiment )

  16. #16
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Merci pour ces bouts de codes et cet article, que je vais lire d'ici peu.

    Je sais qu'un CMS, c'est un peu le nom bateau que l'on donne à une interface qui se veut un rien dynamique. Et que, comme pour tout, il faut définir ses attentes et priorités.

    Ce que tu cites là, c'est exactement ce vers quoi je vais. Notamment au niveau des modules.

    Si tu veux, je peux essayer de te fournir les fichiers de "réflexions" par rapport à ça, que tu visualises au mieux mes priorités et mes attentes, et ainsi définir mes besoins.

    Je vais lire l'article donné (je viens de le lire en diagonale, ça à l'air super intéressant comme truc, en tout cas !)

Discussions similaires

  1. projet PHP avec un MVC sans Frameworkzend
    Par moukit233 dans le forum Langage
    Réponses: 10
    Dernier message: 01/06/2011, 23h39
  2. Comment bien organiser un projet PHP Orienté Objet ?
    Par jeanjean6 dans le forum Langage
    Réponses: 3
    Dernier message: 27/04/2011, 13h41
  3. Diagramme de classe pour projet PHP non orienté objet
    Par dekalima dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 25/01/2011, 19h46
  4. Projet PHP MVC
    Par jeronimo83 dans le forum MVC
    Réponses: 2
    Dernier message: 10/01/2010, 21h17
  5. [MySQL] Projet PHP : Génération de numéro de Références et Stockage
    Par Jimmy_S dans le forum PHP & Base de données
    Réponses: 136
    Dernier message: 27/10/2005, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo