Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-12-2015 10:29:47

lalwende
Membre
Date d'inscription: 02-02-2011
Messages: 40

Présentation d'un CRUD avec doctrine 2 et Twig - utilisation Yml

Bonjour Tout le monde,

Cela fait un petit moment que je regarde ce forum de temps en temps.

Souvent je trouve ma réponse sans avoir besoin de poster, je ne suis donc pas très actif sur ce forum.

J’apprécie grandement l'idée d'avoir une communauté française pour zf.

Je n'ai aucune prétention de quoi que ce soit, je souhaite juste un regard différent.

L'idée est simple -> APPRENDRE (oui çà fait 1/2 ans que j'apprend)

Je n'ai pas les bonnes pratiques et vous allez vous tirer les cheveux. C'est tout l’intérêt de ce post - non pas que vous deveniez chauve - bien au contraire l'idée c'est de grandir dans l'utilisation des bonnes pratiques. 

Je suis autodidacte (sous assistance respiratoire) - merci donc pour votre patience et votre indulgence sur ce code.

Voilà, j'ai repris un CRUD pour mon module NewsContent. Ce CRUD contient deux tables "NewsContent" et "CategoryContent" avec une relation 1n. J'ai utilisé le YML pour générer mes entités et cela fonctionne.

-> Plusieurs News sont rattachées à une seule Catégorie.

Mon CRUD fonctionne bien mais mon code est très très très loin d'être optimal.

=> Il y a de la redondance de code.
=> Je n'utilise pas les fabriques (factories)
=> Je n'utilise pas le model.
=> Je n'utilise pas ou peu le gestionnaire de service.
=> Je n'ai pas envisager que mes modules soient totalement autonomes/indépendants.
=> J'ai beaucoup trop de chose dans mon controller. (pour les chauves -> j'ai des instances d'objet dans mon controller -> pas bien......)

Voici les objectifs proposés par mon Jedy(l'assistance respiratoire - non ce n'est pas Dark): smile

=>  Créer un modèle NewsContent, sa Factory et inscrire cette dernière en tant que service dans le module.config

=> Appeler une instance de NewsContent depuis le ServiceLocator.

=> Dumper le résultat. dump/dump/dump

=> Ajouter les méthodes d’accès à l’EntityManager au modèle(citer lesquelles sont nécessaires).

=> Ajouter les propriétés news_id, title, description au modèle.

=> Ajouter une méthode updateFromArray($arrayValues)

=> Dans la méthode affecter les valeurs du tableau $arrayValues à l’objet (ex: $this->id = $arrayValues[‘id’]wink.

=> Tester la présence de la clé id du tableau $arrayValues

=> Si id présent utiliser le repository (méthode find()) pour récupérer une instance de NewsContent sinon créer une nouvelle instance.

=> Affecter les valeurs correspondantes du tableau aux propriétés de l’instance de NewsContent

=> Appeler les méthodes persist et flush de l’EntityManager retourner l’instance en fin de méthode.

=> Dans le controller récupérer les données du formulaire, construire un tableau avec pour clés id, title, description.

=> Passer le tableau à la méthode updateFromArray de l’instance de News issu du ServiceLocator, passer le résultat de cette méthode à la vue pour renseigner le formulaire

=> Tester avec ou sans id, vérifier en base les données.

Voilà, je résume -> en gros tout ce que j'ai dans le controller et qui ne devrait pas y être est soit dans le model soit dans une factory.

Bon je ne vous fait plus attendre, voici mon github - c’était pour le suspense...

https://github.com/lalwende07/breakeven … ewsContent

Je suis à votre écoute - si vous avez des infos - un projet similaire utilisant les mêmes méthodes ou au contraire. Si vous avez des tutos qui parlent des factories, des services pour m'aider à apprendre je vous en remercie d'avance. 

Je vous remercie pour toute l'attention que vous porterez à cette démarche open.

J'ai trouvé un tuto sur les événements -> Haclong - malheureusement elle n'utilise pas doctrine2 - du coup il est très bien fait mais c'est moins drôle car cela ne répond pas vraiment à mon besoin ou je me trompe. (http://www.haclong.org/fr/content-tags/ … tml?page=2)

Merci, Lalwende.


Just do it

Hors ligne

 

#2 01-12-2015 11:34:18

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Présentation d'un CRUD avec doctrine 2 et Twig - utilisation Yml

Bonjour,

La démarche est intéressante,

Je te conseille de lire ce post du forum : http://www.z-f.fr/forum/viewtopic.php?pid=41810#p41810 Tu en apprendra beaucoup sur une couche qui est complètement inexistante dans ton projet : la couche service. Dire que tu n'utilise pas les modèles n'est pas vrai puisque tu possède tes entités doctrine, encore une fois lis bien la première réponse de Orkin, tu en apprendras beaucoup.

Ensuite, Prends garde au serviceLocator, il n'a de sens que dans les factories dorénavant :
http://www.z-f.fr/forum/viewtopic.php?id=9460

Ce post t'expliquera je l'espère ce point là.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#3 01-12-2015 11:37:39

lalwende
Membre
Date d'inscription: 02-02-2011
Messages: 40

Re: Présentation d'un CRUD avec doctrine 2 et Twig - utilisation Yml

Merci JGreco c'est vraiment sympa. Je regarde çà.


Just do it

Hors ligne

 

#4 02-12-2015 17:13:52

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Présentation d'un CRUD avec doctrine 2 et Twig - utilisation Yml

Salut, rapidement,

- A l'heure actuelle tu peux utiliser les fonctionnalités de PHP 5.5 pour tes fichiers de conf, je te laisse lire les nouvelles features introduites dedans sur internet
- Même chose pour les tableaux tu peux remplacer array() par []
- Tes routes c'est pas propre du tout, typiquement sur une route comme celle-ci '/news/edit[/][/:id[/]]' tu peux avoir /news/edit//monid/ bref pas top. N'essaies pas de faire des routes génériques c'est pas le mieux. Fais le moins de route de type segment que possible. Sauf dans le cas où t'as des routes dynamiques genre avec un id. Mais là tu peux la définir comme ceci : '/news/edit/:id' ça suffit largement
- Les vues ça a l'air assez propre même s'il n'y a pas grand chose dedans
- Le contrôleur ... pas de vérification de tes data en entrée, pas de couche service bref à revoir.
- Pour les entités dommage que tu n'es pas utilisé les annotations doctrine partout
- Mapping je suis pas fan mais ça fait le job
- Tes repository servent à rien

Hors ligne

 

#5 09-12-2015 15:40:46

Nirzol
Membre
Date d'inscription: 11-01-2013
Messages: 65

Re: Présentation d'un CRUD avec doctrine 2 et Twig - utilisation Yml

Quasiment tout est dit ci-dessus. Des petites choses que j'ai pris l'habitude de faire pour me faciliter la vie :

Je fou tout dans dans les factory genre :
$view = new ViewModel;
ou encore
$repo = $this->getEntityManager()->getRepository('NewsContent\Entity\Categorycontent');
Dans indexcontroller tu ajoutes un construct ou t'instancie ce que tu as besoin.


Après pour les form j'utilise les elements form de ZF

Dernière modification par Nirzol (09-12-2015 15:40:59)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages