Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2408 connectés 

 


Pour ou contre du changement sur le topic ?


 
35.7 %
 5 votes
1.  Oui, faq / bonnes pratiques + blabla@php
 
 
0.0 %
        0 vote
2.  Oui, blabla@php uniquement
 
 
7.1 %
 1 vote
3.  Ce topic mérite la poubelle. Pauvre poubelle
 
 
21.4 %
 3 votes
4.  Non, ce topic reste tel quel
 
 
35.7 %
 5 votes
5.  Obiwan n'aime pas le php
 

Total : 16 votes (2 votes blancs)
Ce sondage est clos, vous ne pouvez plus voter
 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  55  56  57  ..  66  67  68  69  70  71
Auteur Sujet :

blabla@php | faq et bonnes pratiques page 1

n°2166629
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2012 à 14:20:13  profilanswer
 

Reprise du message précédent :

skeye a écrit :

De la logique métier dans des annotations en commentaire dans le code. Le machin est censé te faciliter la vie, pas rendre le fonctionnement du truc complètement opaque sans passer 3 jours à naviguer dans le code.[:el g]


D'un autre côté le mapping dans des fichiers séparés j'en ai fait l'expérience avec Hibernate à l'époque (avant que Java ait de vraies annotations) et c'est super frustrant, parce que tu te retrouves en permanence à devoir naviguer entre le fichier de mapping (qui en plus était obligatoirement en XML donc imbitable) et le fichier de modèle et à devoir répéter 15 fois les mêmes noms.

 

Après clairement ça vaut pas de vraies annotations (JPA/Hib 3) ou des objets dédiés (SQLAlchemy, DjangORM), mais je tends à préférer les "annotations en commentaires" (surtout si le parser/compilo est correctement fait et rapporte bien les erreurs) à un fichier de mapping externe, sauf à avoir une très très bonne intégration IDE, parce qu'au final c'est juste encore plus chiant.

Message cité 1 fois
Message édité par masklinn le 04-12-2012 à 14:21:17

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
mood
Publicité
Posté le 04-12-2012 à 14:20:13  profilanswer
 

n°2166631
koskoz
They see me trollin they hatin
Posté le 04-12-2012 à 14:20:53  profilanswer
 

skeye a écrit :


Bénéfice : 0. Si tu sais pas écrire un select sans ORM tu sauras pas utiliser l'ORM correctement non plus.


 
Tu vas x fois plus vite que si tu devais tout coder, il est là le bénéfice [:spamafote]


---------------
Twitter
n°2166638
skeye
Posté le 04-12-2012 à 14:45:14  profilanswer
 

masklinn a écrit :


D'un autre côté le mapping dans des fichiers séparés j'en ai fait l'expérience avec Hibernate à l'époque (avant que Java ait de vraies annotations) et c'est super frustrant, parce que tu te retrouves en permanence à devoir naviguer entre le fichier de mapping (qui en plus était obligatoirement en XML donc imbitable) et le fichier de modèle et à devoir répéter 15 fois les mêmes noms.

 

Après clairement ça vaut pas de vraies annotations (JPA/Hib 3) ou des objets dédiés (SQLAlchemy, DjangORM), mais je tends à préférer les "annotations en commentaires" (surtout si le parser/compilo est correctement fait et rapporte bien les erreurs) à un fichier de mapping externe, sauf à avoir une très très bonne intégration IDE, parce qu'au final c'est juste encore plus chiant.

 

Ah ben de toute manière quelle que soit la solution ce sera toujours la plaie par rapport à une réelle connaissance de la structure de la base qui permet de construire tranquillement ses objets métier coté appli avec des requêtes écrites à la main, on est d'accord.[:doc petrus]

Message cité 1 fois
Message édité par skeye le 04-12-2012 à 14:45:21

---------------
Can't buy what I want because it's free -
n°2166640
skeye
Posté le 04-12-2012 à 14:46:35  profilanswer
 

koskoz a écrit :

Tu vas x fois plus vite que si tu devais tout coder, il est là le bénéfice [:spamafote]


 
Lolzor. Au lieu d'écrire des requêtes simples, tu galères à apprendre une syntaxe liée à ton ORM pour que cet abruti réussisse à générer les mêmes requêtes que tu aurais écrites.
Le temps que tu gagnes d'un coté (un jour, peut-être), tu le perds de l'autre en grande partie.[:dawa]


---------------
Can't buy what I want because it's free -
n°2166641
flo850
moi je
Posté le 04-12-2012 à 14:46:37  profilanswer
 


skeye a écrit :

 

...et c'est presque pas horrible à utiliser sur des formulaires complexes qui vont taper dans plein de tables.[:doc petrus]


tu as vachement testé pour dire ça. Voici le formulaire le plus complexe  (sf1.4, doctrine 1 ) que j'ai dans une appli, à cheval sur 3 tables

Code :
  1. /**/
  2. class ActiviteDureeForm extends ActiviteForm{
  3.    public function configure()
  4.    {
  5.        parent::configure();
  6.        $this->embedRelation('ActiviteAgent','ActiviteAgentDureeForm');
  7.        $this->useFields(array( 'name','structure_id','type_activite_id', 'ActiviteAgent'));
  8.  
  9.    }
  10.  
  11. }
 

il permet de créer une activité et d'y rattacher un nombre quelconque d'agent
Il permet aussi de modifier une activité existante

 

Je n'ai pas de code a te montrer pour la sauvegarde vu qu'il n'y en a pas. Tout est géré par le FW.
Il ne manque que les validator de process métiers, que je n'ai pas copié ici , mais qui s'intègrent très facilement

 

LA définition du schéma est effectivement extremement complexe

Code :
  1. ---
  2. detect_relations: true
  3. options:
  4.  collation: utf8_general_ci
  5.  charset: utf8
  6.  type: InnoDB
  7.  
  8. Activite:
  9.  columns:
  10.    id:
  11.      type: integer(4)
  12.      primary: true
  13.      default: null
  14.      notnull: true
  15.      autoincrement: true
  16.    name:  string(255)
  17.    type_activite_id: integer(4)
  18.    structure_id: integer(4)
  19.    reference: string(255)
  20.    debut: timestamp
  21.    fin: timestamp
  22.    duree: integer # duree réelle de l'activite
  23.    duree_indemnise: integer # durée indemnisé au taux plein ( exemple pour la dispo , duree indemnisée a 3% )
  24.    cout: integer
  25.  indexes:
  26.    idtypesactivites_idx:
  27.      fields: [type_activite_id]
  28.    idstructures_idx:
  29.      fields: [structure_id]
  30.    reference_idx:
  31.      fields: [reference]
  32.  options:
  33.    charset: utf8
  34.    type: InnoDB
  35.    
  36.  
  37.  
  38. ActiviteAgent:
  39.  
  40.  columns:
  41.    id:
  42.      type: integer(4)
  43.      primary: true
  44.      notnull: true
  45.      autoincrement: true
  46.    activite_id: integer(4)
  47.    agent_id: integer(4)
  48.    debut: timestamp
  49.    fin: timestamp
  50.    duree: integer # duree réelle de l'activite
  51.    duree_indemnise: integer # durée indemnisé au taux plein ( exemple pour la dispo , duree indemnisée a 3% )
  52.    cout: integer
  53.    type_paiement:
  54.        type: enum
  55.        values: ['payé','non payé','subrogation']
  56.    statut_paiement:
  57.      type: enum
  58.      values: ['','transmis Civitas']
  59.  indexes:
  60.    idactivites_idx:
  61.      fields: [activite_id]
  62.    idagents_idx:
  63.      fields: [agent_id]
  64.  options:
  65.    charset: utf8
  66.    type: InnoDB
  67.    
  68. Agent:
  69.  columns:
  70.    id:
  71.      type: integer(4)
  72.      primary: true
  73.      notnull: true
  74.      autoincrement: true
  75.    matricule:
  76.      type: integer(4)
  77.      unique: true
  78.      notnull: true
  79.    nom:  string(45)
  80.    prenom: string(45)
  81.  options:
  82.    charset: utf8
  83.    type: InnoDB


Cette définiton crée automatiquement les validations basiques des formulaire ( not null, bon format,.. )

 


l'usage en sous forme de query builder donne ça :

Code :
  1. $query = $this->createQuery('aa')
  2.            ->innerJoin('aa.ActiviteAgentIndemnisation aai')
  3.            ->select('aa.*,aai.id as aai_paye')
  4.            ->orderBy('aa.debut');
  5.  
  6.        if ($annee_paye) {
  7.            $query = $query->andWhere('YEAR(date_indemnisation)= ?', $annee_paye);
  8.        }
  9.        if ($mois_paye) {
  10.            $query = $query->andWhere('MONTH(date_indemnisation) = ?', $mois_paye);
  11.        }
  12.        if ($agent || $structure) {
  13.            if ($agent) {
  14.                $query = $query->andWhere('aa.agent_id = ?', $agent->getId());
  15.            }
  16.            if ($structure) {
  17.                $query = $query->innerJoin('aa.Activite a');
  18.                $query = $query->andWhere('a.structure_id = ?', $structure->getId());
  19.            }
  20.        }
 

C'est sûr que c'est extremement complexe
Truc confortable : je défini tout le morceaux communs au début (order et limit y compris ) ensuite, je colle les morceaux dont j'ai besoin, y compris des jointures

 

EDIT : pour le franglais, je sais, mais c'est une contrainte qu'on m'a imposé ici

Message cité 3 fois
Message édité par flo850 le 04-12-2012 à 14:54:15

---------------

n°2166642
skeye
Posté le 04-12-2012 à 14:47:33  profilanswer
 

flo850 a écrit :


tu as vachement testé pour dire ça. Voici le formulaire le plus complexe  (sf1.4, doctrine 1 )

Code :
  1. /**/
  2. class ActiviteDureeForm extends ActiviteForm{
  3.    public function configure()
  4.    {
  5.        parent::configure();
  6.        $this->embedRelation('ActiviteAgent','ActiviteAgentDureeForm');
  7.        $this->useFields(array( 'name','structure_id','type_activite_id', 'ActiviteAgent'));
  8.  
  9.    }
  10.  
  11. }
 


il permet de créer une activité et d'y rattacher un nombre quelconque d'agent
Il permet aussi de modifier une activité existante

 

Je n'ai pas de code a te montrer pour la sauvegarde vu qu'il n'y en a pas. Tout est géré par le FW.
Il ne manque que les validator, que je n'ai aps copié ici

 

Ah ben c'est sûr que si c'est ça que tu appelles un formulaire complexe, effectivement.[:dawa]

Message cité 1 fois
Message édité par skeye le 04-12-2012 à 14:47:54

---------------
Can't buy what I want because it's free -
n°2166646
flo850
moi je
Posté le 04-12-2012 à 14:56:53  profilanswer
 

skeye a écrit :

 

Ah ben c'est sûr que si c'est ça que tu appelles un formulaire complexe, effectivement.[:dawa]


Tu veux ajouter 4 autres tables liées ?
Ca ne coûte rien de plus.

 

Tu veux faire une validation ? L
a moitié est construite automatiquement par doctrine, il ne te reste plus que celle spécifique à ton métier, avec les bons points d'entrées
Ca te génère même un template HTML adapté pour simplifier l'intégration

 

EDIT : bien sûr, j'imagine que TOI , tu bosses sur des choses réellement complexe.
 

Message cité 2 fois
Message édité par flo850 le 04-12-2012 à 15:01:53

---------------

n°2166649
koskoz
They see me trollin they hatin
Posté le 04-12-2012 à 15:02:23  profilanswer
 

skeye a écrit :


 
Lolzor. Au lieu d'écrire des requêtes simples, tu galères à apprendre une syntaxe liée à ton ORM pour que cet abruti réussisse à générer les mêmes requêtes que tu aurais écrites.
Le temps que tu gagnes d'un coté (un jour, peut-être), tu le perds de l'autre en grande partie.[:dawa]


 
Pourquoi se faire chier à apprendre la syntaxe et l'archi d'un framework alors que tu pourrais coder le tiens ? [:dawak]
 

flo850 a écrit :

 
 
tu as vachement testé pour dire ça. Voici le formulaire le plus complexe  (sf1.4, doctrine 1 ) que j'ai dans une appli, à cheval sur 3 tables


 
Sous sf 1.4 j'avais des formulaires autrement plus complexe, avec des surcharges des doUpdates, doSave, doBind, etc. [:petrus75]
 

flo850 a écrit :


EDIT : bien sûr, j'imagine que TOI , tu bosses sur des choses réellement complexe.  
 


 
J'espère qu'il troll et qu'il n'est pas convaincu de ce qu'il dit :/


---------------
Twitter
n°2166650
skeye
Posté le 04-12-2012 à 15:03:40  profilanswer
 

flo850 a écrit :


Tu veux ajouter 4 autres tables liées ?
Ca ne coûte rien de plus

 

Tu veux faire une validation ? la moitié est construite automatiquement par doctrine, il ne te reste plus que celle spécifique à ton métier, avec les bons points d'entrées
Ca te génère même un template HTML adapté pour simplifier l'intégration

 

EDIT : bien sûr, j'imagine que TOI , tu bosses sur des choses réellement complexe.
 

 

On a dû se taper des trucs avec sous-formulaires, possibilité d'ajouter de nouveaux enregistrements dans les tables liées + des traductions en N langues...le tout sans avoir le droit de découper.
Dans mon souvenir c'était la plaie à faire avec leur machin - en SF2, si ça change quelque chose.[:skeye]

Message cité 1 fois
Message édité par skeye le 04-12-2012 à 15:04:09

---------------
Can't buy what I want because it's free -
n°2166651
skeye
Posté le 04-12-2012 à 15:05:05  profilanswer
 

koskoz a écrit :


 
Pourquoi se faire chier à apprendre la syntaxe et l'archi d'un framework alors que tu pourrais coder le tiens ? [:dawak]
 


 
Quel rapport?[:pingouino dei]
 

koskoz a écrit :

J'espère qu'il troll et qu'il n'est pas convaincu de ce qu'il dit :/


Non.[:jagstang]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 04-12-2012 à 15:05:05  profilanswer
 

n°2166652
flo850
moi je
Posté le 04-12-2012 à 15:05:12  profilanswer
 

J'ai des trucs comme ça  

Code :
  1. public function doBind(array $values) {
  2.        
  3.        $values['sf_guard_user_id'] = sfContext::getInstance()->getUser()->getGuardUser()->getId();
  4.  
  5.        parent::doBind($values);
  6.    }


Mais  ça va, j'ai pas trop eu a abuser de doUpdate/save  
Par contre j'ai deux validators dont je suis assez content :d


---------------

n°2166653
flo850
moi je
Posté le 04-12-2012 à 15:08:43  profilanswer
 

skeye a écrit :

 

On a dû se taper des trucs avec sous-formulaires, possibilité d'ajouter de nouveaux enregistrements dans les tables liées + des traductions en N langues...le tout sans avoir le droit de découper.
Dans mon souvenir c'était la plaie à faire avec leur machin - en SF2, si ça change quelque chose.[:skeye]

 

Enfin ça c'est aussi merdique a gérer correctement sans FW [:proy]
La je viens de te montrer un formulaire avec des sous formulaires pour lesquels il y a possibilité d'ajotuer/d'effacer/ de mettre à jour  et qui enregistre dans 3 tables . C'est pas loin de ce que tu décris, et c'est loin de ce qu'on te cite comme avantage : gagner du temps quand c'est simple pour pouvoir se concentrer sur les parties vraiment complexe.

 

A noter que même dans symfony 2 tu peux faire le choix de monter le formulaire  de le valider à la main en disant  fuck à doctrine. Le choix de l'outil est laissé au développeur.

 

Message cité 1 fois
Message édité par flo850 le 04-12-2012 à 15:10:42

---------------

n°2166654
skeye
Posté le 04-12-2012 à 15:10:52  profilanswer
 

flo850 a écrit :

A noter qeu même dans symfony 2 tu peux faire le choix de valider à la main et de faire fuck doctrine. Le choix est laissé au développeur


J'avais laissé le collègue faire le choix, là-dessus - il voulait tester SF2 et doctrine, j'ai suivi. Comme quoi je suis pas si borné que j'en ai l'air.[:jagstang]


---------------
Can't buy what I want because it's free -
n°2166656
flo850
moi je
Posté le 04-12-2012 à 15:14:26  profilanswer
 

On ne s'est  pas compris
Tu peux utiliser SF2 (ou SF1, ou CI ) et doctrine (ou propel), mais passer en mode manuel de temps en temps, par exemple sur un formulaire infect ou une requete cruciale
 

Message cité 2 fois
Message édité par flo850 le 04-12-2012 à 15:14:50

---------------

n°2166661
skeye
Posté le 04-12-2012 à 15:19:02  profilanswer
 

flo850 a écrit :

On ne s'est  pas compris
Tu peux utiliser SF2 (ou SF1, ou CI ) et doctrine (ou propel), mais passer en mode manuel de temps en temps, par exemple sur un formulaire infect ou une requete cruciale


 
Ah, ça oui.:D  
Mais quand tu testes un FW t'as tendance à vouloir les triturer pour tout faire avec - en tout cas moi oui. Et ça m'énerve grandement de me rendre compte que le truc ne sait pas faire ce que je veux obtenir sans le rendre inutilement complexe.:D


---------------
Can't buy what I want because it's free -
n°2166664
flo850
moi je
Posté le 04-12-2012 à 15:22:54  profilanswer
 

quand tu as un marteau à la main, tout ressemble à un clou

 

Mais c'est pas la faute du FW.

Message cité 1 fois
Message édité par flo850 le 04-12-2012 à 15:23:08

---------------

n°2166665
FlorentG
Posté le 04-12-2012 à 15:26:53  profilanswer
 

flo850 a écrit :

On ne s'est  pas compris
Tu peux utiliser SF2 (ou SF1, ou CI ) et doctrine (ou propel), mais passer en mode manuel de temps en temps, par exemple sur un formulaire infect ou une requete cruciale


Bon en tous cas toi tu m'as convaincu définitivement [:ddr555]

n°2166667
skeye
Posté le 04-12-2012 à 15:29:47  profilanswer
 

flo850 a écrit :

quand tu as un marteau à la main, tout ressemble à un clou
 
Mais c'est pas la faute du FW.


 
La doc me dit "pour faire un formulaire, c'est comme ça:". En phase d'apprentissage, je suis bête et discipliné.[:petrus75]


---------------
Can't buy what I want because it's free -
n°2166668
flo850
moi je
Posté le 04-12-2012 à 15:31:48  profilanswer
 

Il y a un vrai apprentissage quand même au début, sinon tu risques de passer à côté du fonctionnement
 
Le formulaire que j'ai montré en est un bon exemple, je l'avais complètement remonté à la main, parcque  je n'avais pas compris la difference entre fromArray et synchronizeWithArray()  
 
Pour l'ORM part plutôt avec propel pour du SF2. A minima, ça te permettra d'envoyer un CV a ratibus [:cupra] et c'est ce qu'avais conseillé le formateur ( hugo hamond )


---------------

n°2166670
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2012 à 15:34:58  profilanswer
 

skeye a écrit :

Ah ben de toute manière quelle que soit la solution ce sera toujours la plaie par rapport à une réelle connaissance de la structure de la base qui permet de construire tranquillement ses objets métier coté appli avec des requêtes écrites à la main, on est d'accord.[:doc petrus]


Non, c'est complètement con ce que tu dis, tu peux aussi bien te souvenir de tous tes mappings et si t'y arrives grand bien t'en fasse. Perso j'arrive pas à garder tous les types de toutes mes applications en tête en permanence, db ou pas db, donc dans tous les cas je dois me référer régulièrement à la source [:spamafote]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2166673
skeye
Posté le 04-12-2012 à 15:38:12  profilanswer
 

flo850 a écrit :

Il y a un vrai apprentissage quand même au début, sinon tu risques de passer à côté du fonctionnement
 
Le formulaire que j'ai montré en est un bon exemple, je l'avais complètement remonté à la main, parcque  je n'avais pas compris la difference entre fromArray et synchronizeWithArray()  
 
Pour l'ORM part plutôt avec propel pour du SF2. A minima, ça te permettra d'envoyer un CV a ratibus [:cupra] et c'est ce qu'avais conseillé le formateur ( hugo hamond )


Ouais, le collègue utilisait propel avec SF1 si mes souvenirs sont bons.
J'imagine que sans passer par une vraie formation payante au lieu de fouiller la doc tu rates des trucs de toute manière...[:joce]


---------------
Can't buy what I want because it's free -
n°2166674
flo850
moi je
Posté le 04-12-2012 à 15:39:30  profilanswer
 

Bof, j'ai fait la formation payante (niveau avancé , SF2) et je n'y ai pas appris grand chose
 
A la limite, il vaut mieux faire un mini projet à la con


---------------

n°2166675
Volkhen
Posté le 04-12-2012 à 15:40:36  profilanswer
 

skeye a écrit :


 
Ah, ça oui.:D  
Mais quand tu testes un FW t'as tendance à vouloir les triturer pour tout faire avec - en tout cas moi oui. Et ça m'énerve grandement de me rendre compte que le truc ne sait pas faire ce que je veux obtenir sans le rendre inutilement complexe.:D


La même, avec en plus le passage de la 2.0 à la 2.1 : de quoi ? Sur une version mineure ils changent totalement le système de gestion de paquets et l'API des formulaires. Classe.


---------------
Main/Alt1/Alt2/Alt3
n°2166676
skeye
Posté le 04-12-2012 à 15:45:42  profilanswer
 

masklinn a écrit :

Perso j'arrive pas à garder tous les types de toutes mes applications en tête en permanence, db ou pas db, donc dans tous les cas je dois me référer régulièrement à la source [:spamafote]


 
Pour le coup je vois pas le rapport avec l'ORM (ou pas).[:petrus dei]


---------------
Can't buy what I want because it's free -
n°2166677
FlorentG
Posté le 04-12-2012 à 15:46:48  profilanswer
 

flo850 a écrit :

Pour l'ORM part plutôt avec propel pour du SF2. [...] et c'est ce qu'avais conseillé le formateur ( hugo hamond )


A-t-il cité une raison spécifique ? Genre c'est ce qui va être favorisé dans le futur ?

n°2166679
skeye
Posté le 04-12-2012 à 15:49:11  profilanswer
 

flo850 a écrit :

A la limite, il vaut mieux faire un mini projet à la con


C'est ce qu'on a fait - au final c'est une appli toute petite le truc dont je parlais, avec comme difficultés seulement 2/3 formulaires à la con et les emmerdes liées au multilingues.
bah au final je pense pas repartir vers du SF2 sans faire une bonne formation payante pour être sûr de rien avoir raté en route, parce-que là au lieu de m'aider sur les trucs compliqués ça m'a donné l'impression de vouloir faciliter les trucs déjà simples mais de rendre les trucs compliqués encore pires.[:dawao]

Message cité 2 fois
Message édité par skeye le 04-12-2012 à 15:49:43

---------------
Can't buy what I want because it's free -
n°2166680
flo850
moi je
Posté le 04-12-2012 à 15:49:59  profilanswer
 

FlorentG a écrit :


A-t-il cité une raison spécifique ? Genre c'est ce qui va être favorisé dans le futur ?


oui
mais c'était il y a quasiment un an, ça a pu changer depuis


---------------

n°2166681
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2012 à 15:51:41  profilanswer
 

skeye a écrit :

Pour le coup je vois pas le rapport avec l'ORM (ou pas).[:petrus dei]


Le même que le truc auquel ça répond: strictement aucun.

 

Je te dis que le fichier de mapping séparé c'est lourd parce qu'il faut naviguer entre 2+ fichiers pour avoir toutes les infos donc je préfère les annotations ou dédiés qui ont tout au même endroit, ta réponse est complètement à côté de la plaque.

Message cité 2 fois
Message édité par masklinn le 04-12-2012 à 15:54:45

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2166682
skeye
Posté le 04-12-2012 à 15:53:51  profilanswer
 

masklinn a écrit :


Le même que le truc auquel ça répond: strictement aucun.


Je disais que l'ORM est de toute manière une couche supplémentaire casse-couilles à configurer/maintenir quel que soit l'outil de configuration par rapport à une couche model "old-school" avec des requêtes à la main. Je vois un rapport avec l'ORM, moi.:D

Message cité 1 fois
Message édité par skeye le 04-12-2012 à 15:54:21

---------------
Can't buy what I want because it's free -
n°2166683
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2012 à 15:56:39  profilanswer
 

skeye a écrit :

Je disais que l'ORM est de toute manière une couche supplémentaire casse-couilles à configurer/maintenir quel que soit l'outil de configuration par rapport à une couche model "old-school" avec des requêtes à la main. Je vois un rapport avec l'ORM, moi.:D


Donc tu réponds un truc qui n'a aucun rapport avec le truc auquel tu réponds? Et accessoirement, ta couche model "old school" avec requêtes à la main elle va pas non plus se maintenir toute seule [:petrus75]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2166685
skeye
Posté le 04-12-2012 à 15:59:46  profilanswer
 

masklinn a écrit :


Donc tu réponds un truc qui n'a aucun rapport avec le truc auquel tu réponds? Et accessoirement, ta couche model "old school" avec requêtes à la main elle va pas non plus se maintenir toute seule [:petrus75]


 
Evidemment. Mais ça me parait beaucoup plus simple à gérer que des annotations @ORM.[:jagstang]


---------------
Can't buy what I want because it's free -
n°2166687
FlorentG
Posté le 04-12-2012 à 16:04:37  profilanswer
 

flo850 a écrit :


oui
mais c'était il y a quasiment un an, ça a pu changer depuis


Dans le cookbook de la 2.1, ils parlent surtout de Doctrine. J'vais faire encore des recherches

n°2166689
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2012 à 16:15:44  profilanswer
 

skeye a écrit :

Evidemment. Mais ça me parait beaucoup plus simple à gérer que des annotations @ORM.[:jagstang]


En quoi? Au lieu de maintenir des annotations, tu dois aller chasser les requêtes SQL dans des chaînes à travers le truc à la place.

Message cité 1 fois
Message édité par masklinn le 04-12-2012 à 16:17:23

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2166690
skeye
Posté le 04-12-2012 à 16:18:30  profilanswer
 


J'ai pas à me demander quelle syntaxe à la con je dois utiliser pour exprimer ce que je veux, déjà.[:doc petrus]


---------------
Can't buy what I want because it's free -
n°2166693
FlorentG
Posté le 04-12-2012 à 16:49:40  profilanswer
 

Bon moi de toute manière, quelque soit le truc : taper des requêtes à la main, générer à partir d'un fichier XML, générer à partir d'une classe, avoir une API rigolote, le problème vient toujours du merdier sous-jacent : ces putains de DB relationnelles qui n'offrent que des vulgaires tableaux pour tout stocker.
 
Rien que pour une simple hiérarchie, y'a 25 solutions aussi nulles les unes que les autres. Pour l'héritage/extension de type c'est pareil. Ça ne correspond plus du tout à ce qu'on a au-dessus, à savoir des langages objets [:petrus75]

n°2166695
koskoz
They see me trollin they hatin
Posté le 04-12-2012 à 16:51:37  profilanswer
 

skeye a écrit :


C'est ce qu'on a fait - au final c'est une appli toute petite le truc dont je parlais, avec comme difficultés seulement 2/3 formulaires à la con et les emmerdes liées au multilingues.
bah au final je pense pas repartir vers du SF2 sans faire une bonne formation payante pour être sûr de rien avoir raté en route, parce-que là au lieu de m'aider sur les trucs compliqués ça m'a donné l'impression de vouloir faciliter les trucs déjà simples mais de rendre les trucs compliqués encore pires.[:dawao]


 
Il m'a fallut 4 mois pour bien maîtriser SF1.4, avec l'aide de bons devs IRL. Pas besoin de formation, et si tu te poses une questions tu regardes les sources.
 

masklinn a écrit :


Le même que le truc auquel ça répond: strictement aucun.
 
Je te dis que le fichier de mapping séparé c'est lourd parce qu'il faut naviguer entre 2+ fichiers pour avoir toutes les infos donc je préfère les annotations ou dédiés qui ont tout au même endroit, ta réponse est complètement à côté de la plaque.


 
+1.
Et pour ceux qui sont gênés par les annotations en commentaire il est tout à fait possible de le faire en PHP, directement dans la fonction.
 

FlorentG a écrit :


Dans le cookbook de la 2.1, ils parlent surtout de Doctrine. J'vais faire encore des recherches


 
J'ai l'impression que c'est toujours Doctrine qui a été mis en avant (d'un autre côté c'est l'ORM de Sensio [:spamafote]), mais j'entends beaucoup de bien de Propel notamment avec les "criterias".


---------------
Twitter
n°2166699
skeye
Posté le 04-12-2012 à 17:12:02  profilanswer
 

koskoz a écrit :

Pas besoin de formation, et si tu te poses une questions tu regardes les sources.


[:vyse]
...le problème c'est que ça résume bien le fonctionnement des gros framewroks php, ZF est pareil...[:el g]


Message édité par skeye le 04-12-2012 à 17:12:36

---------------
Can't buy what I want because it's free -
n°2166703
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2012 à 17:14:15  profilanswer
 

FlorentG a écrit :

Ça ne correspond plus du tout à ce qu'on a au-dessus, à savoir des langages objets [:petrus75]


J'ai pas encore vu de DBO qui ressemblait à quelque chose :/
 
Mais tu peux utiliser une db non rel, genre redis. Ou des fonctionalités nonrel dans un RDBMS, genre hstore ou les arrays de postgres [:dawa]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2166706
FlorentG
Posté le 04-12-2012 à 17:20:44  profilanswer
 

masklinn a écrit :

J'ai pas encore vu de DBO qui ressemblait à quelque chose :/


Shit. On s'y met [:synthe1000000]

n°2166731
ratibus
Posté le 04-12-2012 à 19:26:27  profilanswer
 

flo850 a écrit :

 

tu as vachement testé pour dire ça. Voici le formulaire le plus complexe  (sf1.4, doctrine 1 ) que j'ai dans une appli, à cheval sur 3 tables

Code :
  1. /**/
  2. class ActiviteDureeForm extends ActiviteForm{
  3.    public function configure()
  4.    {
  5.        parent::configure();
  6.        $this->embedRelation('ActiviteAgent','ActiviteAgentDureeForm');
  7.        $this->useFields(array( 'name','structure_id','type_activite_id', 'ActiviteAgent'));
  8.  
  9.    }
  10.  
  11. }
 

il permet de créer une activité et d'y rattacher un nombre quelconque d'agent
Il permet aussi de modifier une activité existante

 

Je n'ai pas de code a te montrer pour la sauvegarde vu qu'il n'y en a pas. Tout est géré par le FW.
Il ne manque que les validator de process métiers, que je n'ai pas copié ici , mais qui s'intègrent très facilement

 

LA définition du schéma est effectivement extremement complexe

Code :
  1. ---
  2. detect_relations: true
  3. options:
  4.  collation: utf8_general_ci
  5.  charset: utf8
  6.  type: InnoDB
  7.  
  8. Activite:
  9.  columns:
  10.    id:
  11.      type: integer(4)
  12.      primary: true
  13.      default: null
  14.      notnull: true
  15.      autoincrement: true
  16.    name:  string(255)
  17.    type_activite_id: integer(4)
  18.    structure_id: integer(4)
  19.    reference: string(255)
  20.    debut: timestamp
  21.    fin: timestamp
  22.    duree: integer # duree réelle de l'activite
  23.    duree_indemnise: integer # durée indemnisé au taux plein ( exemple pour la dispo , duree indemnisée a 3% )
  24.    cout: integer
  25.  indexes:
  26.    idtypesactivites_idx:
  27.      fields: [type_activite_id]
  28.    idstructures_idx:
  29.      fields: [structure_id]
  30.    reference_idx:
  31.      fields: [reference]
  32.  options:
  33.    charset: utf8
  34.    type: InnoDB
  35.    
  36.  
  37.  
  38. ActiviteAgent:
  39.  
  40.  columns:
  41.    id:
  42.      type: integer(4)
  43.      primary: true
  44.      notnull: true
  45.      autoincrement: true
  46.    activite_id: integer(4)
  47.    agent_id: integer(4)
  48.    debut: timestamp
  49.    fin: timestamp
  50.    duree: integer # duree réelle de l'activite
  51.    duree_indemnise: integer # durée indemnisé au taux plein ( exemple pour la dispo , duree indemnisée a 3% )
  52.    cout: integer
  53.    type_paiement:
  54.        type: enum
  55.        values: ['payé','non payé','subrogation']
  56.    statut_paiement:
  57.      type: enum
  58.      values: ['','transmis Civitas']
  59.  indexes:
  60.    idactivites_idx:
  61.      fields: [activite_id]
  62.    idagents_idx:
  63.      fields: [agent_id]
  64.  options:
  65.    charset: utf8
  66.    type: InnoDB
  67.    
  68. Agent:
  69.  columns:
  70.    id:
  71.      type: integer(4)
  72.      primary: true
  73.      notnull: true
  74.      autoincrement: true
  75.    matricule:
  76.      type: integer(4)
  77.      unique: true
  78.      notnull: true
  79.    nom:  string(45)
  80.    prenom: string(45)
  81.  options:
  82.    charset: utf8
  83.    type: InnoDB


Cette définiton crée automatiquement les validations basiques des formulaire ( not null, bon format,.. )

 


l'usage en sous forme de query builder donne ça :

Code :
  1. $query = $this->createQuery('aa')
  2.            ->innerJoin('aa.ActiviteAgentIndemnisation aai')
  3.            ->select('aa.*,aai.id as aai_paye')
  4.            ->orderBy('aa.debut');
  5.  
  6.        if ($annee_paye) {
  7.            $query = $query->andWhere('YEAR(date_indemnisation)= ?', $annee_paye);
  8.        }
  9.        if ($mois_paye) {
  10.            $query = $query->andWhere('MONTH(date_indemnisation) = ?', $mois_paye);
  11.        }
  12.        if ($agent || $structure) {
  13.            if ($agent) {
  14.                $query = $query->andWhere('aa.agent_id = ?', $agent->getId());
  15.            }
  16.            if ($structure) {
  17.                $query = $query->innerJoin('aa.Activite a');
  18.                $query = $query->andWhere('a.structure_id = ?', $structure->getId());
  19.            }
  20.        }
 

C'est sûr que c'est extremement complexe
Truc confortable : je défini tout le morceaux communs au début (order et limit y compris ) ensuite, je colle les morceaux dont j'ai besoin, y compris des jointures

 

EDIT : pour le franglais, je sais, mais c'est une contrainte qu'on m'a imposé ici

 

Tu peux virer la ligne 12 :)

n°2166738
masklinn
í dag viðrar vel til loftárása
Posté le 04-12-2012 à 19:45:37  profilanswer
 

skeye a écrit :

C'est ce qu'on a fait - au final c'est une appli toute petite le truc dont je parlais, avec comme difficultés seulement 2/3 formulaires à la con et les emmerdes liées au multilingues.
bah au final je pense pas repartir vers du SF2 sans faire une bonne formation payante pour être sûr de rien avoir raté en route, parce-que là au lieu de m'aider sur les trucs compliqués ça m'a donné l'impression de vouloir faciliter les trucs déjà simples mais de rendre les trucs compliqués encore pires.[:dawao]


Sinon tu regardes ce qui existe en !php aussi, ça peut être bien [:elessar53]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  55  56  57  ..  66  67  68  69  70  71

Aller à :
Ajouter une réponse
 

Sujets relatifs
Problème pour une mise en page sous forme de tableauAfficher sur une page web directement le resultat d'une autre page web
[PHP] Fonction include plus rapide qu'un bout de code dans la page ?Ouvrir un fichier HTML en fin de page
[Résolu] Expirer la cache au niveau de la pageexecuter une page php sans rien afficher
inserer dans ma page wikiControler le changement de page
Certificat SSL a valider pour chaque élément de pageinstallé un mdp sur une page web avec Namo
Plus de sujets relatifs à : blabla@php | faq et bonnes pratiques page 1


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)