Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide Recherche
671 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  35  36  37  ..  62  63  64  65  66  67
Auteur Sujet :

Model View Controller (MVC) - Architecture des applications PHP

n°1654379
FlorentG
Unité de Masse
Posté le 07-12-2007 à 11:36:28  profilanswer
 

Reprise du message précédent :
Nan, c'est la vérité, arrête d'être de mauvaise foi comme ça :(


---------------
last.fmflickr
mood
Publicité
Posté le 07-12-2007 à 11:36:28  profilanswer
 

n°1654386
Masklinn
í dag viðrar vel til loftárása
Posté le 07-12-2007 à 11:41:22  profilanswer
 

FlorentG a écrit :

Nan, c'est la vérité, arrête d'être de mauvaise foi comme ça :(


Attends, c'est quand même toi qui essaie de faire croire qu'il y a eu une phase de conception impliquée dans la création du parseur PHP je rappelle [:bien]

 

Et franchement, quand je vois ça en me balladant sur l'internet:

 

http://www.sitepoint.com/blogs/200 [...] mment-1961

Citation :

In addition to the parsing of double quoted strings for possible variable substitutions that typically aren’t there, the poor quality of compiled code from the PHP compiler is a contributing factor.

 

Our paper from a few years ago details simple code optimisations that can be made at the PHP compiled code level, the problems with double quoted strings are illustrated nicely.

 

http://www.php-accelerator.co.uk/PHPA_Article.pdf

 

The “problem” is that the PHP lexer splits strings around whitespace, and the PHP code generator emits opcodes to concatenate each word back together again.

 

In an example from our paper, you can see the compiled code for the following short source sequence.

 

< ? $x = 'inefficient'; echo "This is rather $x code\n"; ?> op 0 2 ZEND_FETCH_W str='x' fetch local op 1 2 ZEND_ASSIGN var* 0 str='inefficient' R1 (unused) op 2 3 ZEND_INIT_STRING R2 op 3 3 ZEND_ADD_STRING tvar T2 Vconst �This� R2 op 4 3 ZEND_ADD_STRING tvar T2 Vconst � � R2 op 5 3 ZEND_ADD_STRING tvar T2 Vconst �is� R2 op 6 3 ZEND_ADD_STRING tvar T2 Vconst � � R2 op 7 3 ZEND_ADD_STRING tvar T2 Vconst �rather� R2 op 8 3 ZEND_ADD_STRING tvar T2 Vconst � � R2 op 9 3 ZEND_FETCH_R str='x' fetch local R3 op 10 3 ZEND_ADD_VAR T2 var* 3 R2 op 11 3 ZEND_ADD_STRING tvar T2 Vconst � � R2 op 12 3 ZEND_ADD_STRING tvar T2 Vconst �code� R2 op 13 3 ZEND_ADD_CHAR �\n� R2 op 14 3 ZEND_ECHO T2 op 15 5 ZEND_RETURN val=1

 

The thing to observe here is the number of ZEND_ADD_STRING operations that concatenate chunks of the code. Basic optimisations improve the code to

 

op 0 2 ZEND_FETCH_W str='x' fetch local op 1 2 ZEND_ASSIGN var* 0 str='inefficient' R3 op 2 3 ZEND_INIT_STRING R2 op 3 3 ZEND_ADD_STRING tvar T2 Vconst �This is rather � R2 op 4 3 ZEND_ADD_VAR T2 var* 3 R2 op 5 3 ZEND_ADD_STRING tvar T2 Vconst � code\n� R2 op 6 3 ZEND_ECHO T2 op 7 5 ZEND_RETURN val=1

 

halving the number of opcodes, improving runtime efficiency, and also storage requirements in a code cache or encoded file.

 

ionCube


lol quoi. Ca a sûrement été corrigé depuis (ça a été posté en 2005), mais ça va un peu à l'encontre de ta déclaration que le parser PHP est "le plus efficace possible"


Message édité par Masklinn le 07-12-2007 à 11:46:00

---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1654391
FlorentG
Unité de Masse
Posté le 07-12-2007 à 11:43:01  profilanswer
 

No comment.


---------------
last.fmflickr
n°1654427
Shinuza
This is unexecpected
Posté le 07-12-2007 à 12:02:53  profilanswer
 

FlorentG a écrit :

Nan, c'est la vérité, arrête d'être de mauvaise foi comme ça :(

Bah déja le fait que le parseur parse les chaines entre quotes est une connerie, avec la concaténation t'as pas ce genre de problème, ou alors y'a une syntaxe/fonction particulière (genre printf) pour explicitement parser la chaine.
 
En dehors de ça, le langage n'a aucune souplesse parce qu'il n'a pas de grammaire,et à l'inverse tu peux écrire plus ou moins n'importe quoi des que la chaine commence par un "$", parce que finalement un fichier php c'est une enorme chaine de caractère [:spamafote]


---------------
Test
n°1654431
FlorentG
Unité de Masse
Posté le 07-12-2007 à 12:07:22  profilanswer
 

Shinuza a écrit :

Bah déja le fait que le parseur parse les chaines entre quotes est une connerie, avec la concaténation t'as pas ce genre de problème, ou alors y'a une syntaxe/fonction particulière (genre printf) pour explicitement parser la chaine.


Ca tu le retrouves quand-même dans d'autres langages, hein... Faut arrêter de toujours blâmer PHP pour des choses qu'on retrouve ailleurs. Y'a exactement la même chose en perl, et là bizarrement personne vient critiquer.
 

Shinuza a écrit :

En dehors de ça, le langage n'a aucune souplesse parce qu'il n'a pas de grammaire,et à l'inverse tu peux écrire plus ou moins n'importe quoi des que la chaine commence par un "$", parce que finalement un fichier php c'est une enorme chaine de caractère [:spamafote]


C'est justement ce que je dis : leur parser pourri n'autorise rien. Il auraient dû tout de suite mettre un opcode cache, ça aurait permis de faire un parser beaucoup plus complet avec plus de fonctionnalités/possibilités. Vu la nature ultra-dynamique du langage, les possibilités pourraient être beaucoup plus grandes... Mais nan, rien à faire :(


---------------
last.fmflickr
n°1654459
Masklinn
í dag viðrar vel til loftárása
Posté le 07-12-2007 à 12:25:30  profilanswer
 

Shinuza a écrit :

Bah déja le fait que le parseur parse les chaines entre quotes est une connerie


Oui mais non, ça c'est une fonctionalité potentiellement intéressante, en Ruby c'est super pratique pour formatter lisiblement des chaînes.

FlorentG a écrit :

C'est justement ce que je dis : leur parser pourri n'autorise rien. Il auraient dû tout de suite mettre un opcode cache, ça aurait permis de faire un parser beaucoup plus complet avec plus de fonctionnalités/possibilités.


Nan mais le problème c'est que tu pars des mauvaises hypothèses, ce qu'ils auraient dû faire c'est surtout embaucher des gens qui savent écrire des parsers, ou créer une grammaire solide pour utiliser un des gigazillions de parser generators du marché (à noter que la première option n'exclut pas d'écrire une grammaire), et c'est pas parce que t'as un opcode cache que t'as le droit de faire un parser pourri, et enfin c'est pas parce que le parser a plus de possibilités qu'il est nécessairement plus lent


---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1654467
FlorentG
Unité de Masse
Posté le 07-12-2007 à 12:32:07  profilanswer
 

Masklinn a écrit :

Nan mais le problème c'est que tu pars des mauvaises hypothèses, ce qu'ils auraient dû faire c'est surtout embaucher des gens qui savent écrire des parsers,


Ah nan mais je suis d'accord avec toi
 

Masklinn a écrit :

ou créer une grammaire solide pour utiliser un des gigazillions de parser generators du marché


Bah devine quoi, ils utilisent justement YACC pour leurs parsers  :sol:  :sol:  
 
PHP : we don't just use existing technologies, we use them badly


---------------
last.fmflickr
n°1654482
Dj YeLL
$question = $to_be || !$to_be;
Posté le 07-12-2007 à 13:33:54  profilanswer
 

Masklinn a écrit :


Oui mais non, ça c'est une fonctionalité potentiellement intéressante, en Ruby c'est super pratique pour formatter lisiblement des chaînes.


 
[:rofl] Masklinn, ou l'art de ne jamais être d'accord !
 
Y'avait une offre promotionnelle sur les esprits de contraction ? :whistle:
 
BOn en tout cas je ne suis pas d'accord, si tu veux faire une chaîne formatée proprement tu utilise sprintf (et ses variantes) qui sont faites pour ça...
 
Je trouve ça d'un déguelasse de foutre directement des variables dans une chaîne entre quotes [:mlc]


---------------
Gamertag: CoteBlack YeLL
n°1654529
Masklinn
í dag viðrar vel til loftárása
Posté le 07-12-2007 à 14:42:19  profilanswer
 

Dj YeLL a écrit :

[:rofl] Masklinn, ou l'art de ne jamais être d'accord !


[:kbchris]

Dj YeLL a écrit :

Je trouve ça d'un déguelasse de foutre directement des variables dans une chaîne entre quotes [:mlc]


Oui et non, ça permet aussi de savoir directement ce qu'on insère sans avoir à faire des allers et retours entre la chaîne et les paramètres.
 
En Ruby, ça marche vachement bien :o


---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1654536
omega2
Posté le 07-12-2007 à 14:48:40  profilanswer
 

Masklinn entrein de dire du bien d'une des fonctionalités (c'est un bien grand mot) de base de php?
Je pensais pas voir ça un jour.

n°1654680
Dj YeLL
$question = $to_be || !$to_be;
Posté le 07-12-2007 à 16:24:27  profilanswer
 

 
Masklinn a écrit :


Oui et non, ça permet aussi de savoir directement ce qu'on insère sans avoir à faire des allers et retours entre la chaîne et les paramètres.

 

En Ruby, ça marche vachement bien :o

 

C'est sûr, mais y'a pas la concat pour ça ?

 

Enfin bon, en ce qui me concerne je trouve 10 fois plus clair de faire ça :

 
Code :
  1. $var = 'Ma super phrase pleine de ' . $variable . ' qui en a une par ' . $ici . ' et une autre par ' . $la . ' et une ' . CONSTANTE . ' et une ' . $derniere_variable;
 

Ou ça :

 
Code :
  1. $var = 'Ma super phrase pleine de ' . $Class->variable . ' qui en a une par ' . $Class->ici . ' et une autre par ' . $Class->la . ' et une ' . CONSTANTE . ' et une ' . $Class->derniere_variable;
 

Que ça :

 
Code :
  1. $var = "Ma super phrase pleine de $variable qui en a une par $ici et une autre par $la et une " . CONSTANTE . " et une $derniere_variable";
 

Ou ça :

 
Code :
  1. $var = "Ma super phrase pleine de {$Class->variable} qui en a une par {$Class->ici} et une autre par {$Class->la} et une " . CONSTANTE . " et une {$Class->derniere_variable}";
 

(bien que je trouve la dernière assez lisible et moins crade que la précédente)

 

Mais bon, quand je reprends un code avec toutes les variables directement dans les chaînes, ça me gave... et en plus t'es obligé de concaténer quand même les fois où tu utilise des constantes.

 

Edit : Tiens, je me croyais dans le topic blabla en plus :o


Message édité par Dj YeLL le 07-12-2007 à 16:27:25

---------------
Gamertag: CoteBlack YeLL
n°1654686
FlorentG
Unité de Masse
Posté le 07-12-2007 à 16:29:25  profilanswer
 

La dernière est pas mal et pas trop lourdingue [:dawa]


---------------
last.fmflickr
n°1654689
Shinuza
This is unexecpected
Posté le 07-12-2007 à 16:34:05  profilanswer
 

Masklinn a écrit :


Oui mais non, ça c'est une fonctionalité potentiellement intéressante, en Ruby c'est super pratique pour formatter lisiblement des chaînes.


A moins qu'il y ait une autre manière que

Code :
  1. d = 6
  2. puts "ok #{d}" //ok 6

parce que

Code :
  1. d = 6
  2. puts "ok d" //ok d

on parle pas de la même chose.

 

Ruby utilise une syntaxe particulière à l'interieur de la chaine de caractère pour le formatage en question, alors que php utilise la même syntaxe pour les chaines à l'intérieur et à l'extérieur des quotes (un simple $var donc)

 

FlorentG : Je fais pas de perl :o
DJYell : Je pense que la coloration syntaxique joue beaucoup. Même dans Notepad ++

puts "ok #{d}"

et

puts "ok d"

ne sont pas rendu pareil :)


Message édité par Shinuza le 07-12-2007 à 16:36:50

---------------
Test
n°1664111
theredled
● REC
Posté le 30-12-2007 à 16:51:33  profilanswer
 

Yo
Dans mon site j'ai ça :

 

Un script "controler.php" sur laquelle arrivent toutes les pages à afficher (avec des paramètres différents)
Un script par page, ex "page_panier.php", contenant une seule classe, qui elle contient
- Une méthode "métier" qui prépare les données à afficher (c'est bien ça une couche métier :( ? )
- Une méthode "affichage"
J'ai aussi des scripts du même genre que "page_panier.php" pour les menus.

 

Au final, controler.php appelle toutes les méthode métier, puis toutes les méthodes d'affichage, dans l'ordre voulu.

 

Est-ce qu'on peut appeller ça un MVC ?
Ou est-ce que j'ai rien compris et que le but d'un MVC n'est pas simplement de séparer temporellement le traitement des données et leur affichage ?


Message édité par theredled le 30-12-2007 à 16:55:33

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1664139
Skateinmar​s
Profil: dans ta chambre
Posté le 30-12-2007 à 18:56:54  profilanswer
 

C'est à peu près ca, mis à part que la couche métier (le modèle) n'a pas de rapport avec la vue et vice-versa


---------------
Feedback HAV
n°1664141
theredled
● REC
Posté le 30-12-2007 à 18:57:52  profilanswer
 

Skateinmars a écrit :

C'est à peu près ca, mis à part que la couche métier (le modèle) n'a pas de rapport avec la vue et vice-versa


C-a-d ? ils devraient ou pas ?


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1664143
Skateinmar​s
Profil: dans ta chambre
Posté le 30-12-2007 à 19:02:03  profilanswer
 

theredled a écrit :


C-a-d ? ils devraient ou pas ?


Ta méthode métier et ta méthode affichage ne doivent pas être liées.
 
Par exemple ton panier tu peut très bien l'afficher en petit sur toutes les pages du sites (accueil, produits etc) et donc devoir charger le modèle panier tout le temps, mais tu chargera la vue panier uniquement pour la page panier. C'est le controlleur qui choisit quels modèles et quelles vues charger selon la requete.


---------------
Feedback HAV
n°1664144
theredled
● REC
Posté le 30-12-2007 à 19:06:57  profilanswer
 

Skateinmars a écrit :

C'est le controlleur qui choisit quels modèles et quelles vues charger selon la requete.


Ici c'est bien le cas, seulement il est vrai que dans mon truc une vue X est forcément attachée à un modèle X, puisque ce modèle à pour rôle de préparer la vue :/
 
Donc en fait je vois pas ce qu'est un modèle si c'est pas un truc qui prépare une vue...


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1664146
Skateinmar​s
Profil: dans ta chambre
Posté le 30-12-2007 à 19:11:22  profilanswer
 

Le modèle doit simplement charger des données, depuis la bdd par exemple.

 

Ici on peut dire que le controlleur va charger le modèle, lui demander de créer un array avec le panier, puis passer cet array à la vue qui elle va boucler dessus pour créer la liste de produits par exemple.

 

Edit : bien sur c'est aussi le modèle qui va créer les données, les modifier, etc...


Message édité par Skateinmars le 30-12-2007 à 19:11:47

---------------
Feedback HAV
n°1664149
Masklinn
í dag viðrar vel til loftárása
Posté le 30-12-2007 à 19:30:05  profilanswer
 

theredled a écrit :


Ici c'est bien le cas, seulement il est vrai que dans mon truc une vue X est forcément attachée à un modèle X, puisque ce modèle à pour rôle de préparer la vue :/


C'est là qu'est l'erreur, c'est au controller de faire ça (il transmet les données tirées du modèle à la vue)

theredled a écrit :

Donc en fait je vois pas ce qu'est un modèle si c'est pas un truc qui prépare une vue...


C'est le gestionnaire des données métiers, c'est souvent un ensemble de classes gérant un accès DB par exemple, mais ça peut tout aussi bien être une autre source de données (feed, interface SOAP ou autre, ...)

Message cité 1 fois
Message édité par Masklinn le 30-12-2007 à 19:38:42

---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1664166
theredled
● REC
Posté le 30-12-2007 à 21:53:13  profilanswer
 

Masklinn a écrit :

C'est là qu'est l'erreur, c'est au controller de faire ça (il transmet les données tirées du modèle à la vue)

 

C'est le gestionnaire des données métiers, c'est souvent un ensemble de classes gérant un accès DB par exemple, mais ça peut tout aussi bien être une autre source de données (feed, interface SOAP ou autre, ...)


Ah [:dawao] Ben ça j'ai aussi, j'ai un ensemble de classes regroupées contenant toutes mes requetes, appelées depuis mes méthodes metier(). Du coup ce serait ça mon modèle [:klemton]

 

Ca ferait :
- mes classes BDD = Modèle
- mes méthodes affichage() + fonctions/classes html regroupées = Vue
- tout le reste = Contrôleur

 

Ce qui est bizarre c'est que ok les 3 sont bien séparés, mais ils ont des formes et des tailles carrément différentes :/

 

Alors MVC ou pas ?
En fait la séparation M/V/C, c'est une séparation "physique" et non pas forcément "chronologique" ?

Message cité 1 fois
Message édité par theredled le 30-12-2007 à 21:57:05

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1664167
Masklinn
í dag viðrar vel til loftárása
Posté le 30-12-2007 à 21:58:24  profilanswer
 

theredled a écrit :


Ah [:dawao] Ben ça j'ai aussi, j'ai un ensemble de classes regroupées contenant toutes mes requetes, appelées depuis mes méthodes metier(). Du coup ce serait ça mon modèle [:klemton]
 
Ca ferait :
- mes classes BDD = Modèle
- mes méthodes affichage() = Vue
- tout le reste = Contrôleur


En gros, sachant que les "méthodes d'affichage" c'est principalement les méthodes de rendu des templates pour du web.

theredled a écrit :

Ce qui est bizarre c'est que ok les 3 sont bien séparés, mais ils ont des formes et des tailles carrément différentes :/


Ben c'est un peu normal, vu qu'ils font pas la même chose [:petrus75]

theredled a écrit :

En fait la séparation M/V/C, c'est une séparation "physique" et non pas forcément "chronologique" ?


C'est une séparation logique entre des "composants" n'ayant pas de raison d'être fortement couplés.
 
Mais franchement, ce serait probablement plus simple si tu utilisais un framework existant.


---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1664168
theredled
● REC
Posté le 30-12-2007 à 22:03:01  profilanswer
 

Masklinn a écrit :

Mais franchement, ce serait probablement plus simple si tu utilisais un framework existant.


Nan mais c'est trop tard de chez trop tard, le site est énorme et déja en ligne :D

 

Simplement j'aimerais avoir les mots pour expliquer son fonctionnement (doc + embauches futures + culture perso), d'où mes questions ici.

Message cité 1 fois
Message édité par theredled le 30-12-2007 à 22:04:36

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1664170
theredled
● REC
Posté le 30-12-2007 à 22:11:19  profilanswer
 

Masklinn a écrit :


En gros, sachant que les "méthodes d'affichage" c'est principalement les méthodes de rendu des templates pour du web.


Ouaip, chez moi c'est quasi ça, mais le language de template c'est php. Mais transformable très facilement.

 

Grâce à la séparation logique de la couche présentation.

 

D'ailleurs pareil pour l'accès aux données, j'ai juste à changer le contenu de mes classes BDD pour les faire passer en XML (ou juste changer de SGBD), grâce à la séparation de la couche données.

 

[:hahaguy] j'ai tout compris je crois [:volta]

 

Enfin nan, c'est quoi la différence entre une Architecture trois tiers et une archi MVC ?

Message cité 1 fois
Message édité par theredled le 30-12-2007 à 22:13:28

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1664171
Masklinn
í dag viðrar vel til loftárása
Posté le 30-12-2007 à 22:12:07  profilanswer
 

theredled a écrit :


Nan mais c'est trop tard de chez trop tard, le site est énorme et déja en ligne :D
 
Simplement j'aimerais avoir les mots pour expliquer son fonctionnement (doc + embauches futures + culture perso), d'où mes questions ici.


Le plus simple dans ce cas c'est probablement d'aller directement à la source: MVC at XEROX PARC (78-79), Applications Programming in Smalltalk-80(TM): How to use Model-View-Controller (MVC) et GUI Architectures dans Patterns of Enterprise Application Architecture Dev de Fowler me semblent être de saines lectures :D


---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1664172
Masklinn
í dag viðrar vel til loftárása
Posté le 30-12-2007 à 22:16:33  profilanswer
 

theredled a écrit :

Enfin nan, c'est quoi la différence entre une Architecture trois tiers et une archi MVC ?


Que en pratique le model et la vue peuvent communiquer plus ou moins directement (un MVC est en triangle avec des communications possibles sur les axes Model <-> Controller, Controller <-> View et Model <-> View, alors qu'un three-tiers est pûrement linéaire, les seules communications autorisées étant data tier <-> middleware (ou logic tier) et middleware <-> client (ou presentation) tier, bypasser le middleware n'est pas permis)

 

En général, pour tout ce qui est informatique je conseille d'ailler voir la wikipedia en, et le cas ne déroge pas à la règle: Multitier architecture est simple et clair, et inclus une comparaison Three Tier - MVC :)

Message cité 1 fois
Message édité par Masklinn le 30-12-2007 à 22:16:56

---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1664175
theredled
● REC
Posté le 30-12-2007 à 22:38:31  profilanswer
 


C'est marrant souvent les textes originaux sont bien plus fun et clairs que certains tutos sur le sujet  [:cerveau klem] bon, à part que c'est de l'anglais.

Masklinn a écrit :


Que en pratique le model et la vue peuvent communiquer plus ou moins directement (un MVC est en triangle avec des communications possibles sur les axes Model <-> Controller, Controller <-> View et Model <-> View, alors qu'un three-tiers est pûrement linéaire, les seules communications autorisées étant data tier <-> middleware (ou logic tier) et middleware <-> client (ou presentation) tier, bypasser le middleware n'est pas permis)


[:totoz] Ca ça veut dire que les données peuvent être parfois préparées par le controleur, parfois par la vue ? Ca n'est pas sale ?

 

Moi je préfère le 3-tier j'ai choisi mon camp, pis tfaçon quelque part c'est une sorte de MVC [:dawao]


Message édité par theredled le 30-12-2007 à 22:42:11

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1664185
theredled
● REC
Posté le 30-12-2007 à 23:53:43  profilanswer
 

Sinon thanks you pour les ninfos.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1664188
theredled
● REC
Posté le 31-12-2007 à 00:29:31  profilanswer
 

Niveau pédagogie : http://www.symfony-project.org/boo [...] ony-s-Code [:cerveau lent]


Message édité par theredled le 31-12-2007 à 00:30:34

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
n°1679534
Skateinmar​s
Profil: dans ta chambre
Posté le 31-01-2008 à 11:39:05  profilanswer
 

Nouvelle version de codeigniter : http://codeigniter.com/news/codeig [...] e_streets/


---------------
Feedback HAV
n°1679687
NazzTazz
Profil: d'aile
Posté le 31-01-2008 à 14:08:19  profilanswer
 

Changelog:
 

Change Log
Version 1.6.0
 
Release Date: January 30, 2008
 
    * DBForge
          o Added DBForge to the database tools.
          o Moved create_database() and drop_database() into DBForge.
          o Added add_field(), add_key(), create_table(), drop_table(), add_column(), drop_column(), modify_column() into DBForge.
    * Active Record
          o Added protect_identifiers() in Active Record.
          o All AR queries are backticked if appropriate to the database.
          o Added where_in(), or_where_in(), where_not_in(), or_where_not_in(), not_like() and or_not_like() to Active Record.
          o Added support for limit() into update() and delete() statements in Active Record.
          o Added empty_table() and truncate_table() to Active Record.
          o Added the ability to pass an array of tables to the delete() statement in Active Record.
          o Added count_all_results() function to Active Record.
          o Added select_max(), select_min(), select_avg() and select_sum() to Active Record.
          o Added the ability to use aliases with joins in Active Record.
          o Added a third parameter to Active Record's like() clause to control where the wildcard goes.
          o Added a third parameter to set() in Active Record that withholds escaping data.
          o Changed the behaviour of variables submitted to the where() clause with no values to auto set "IS NULL"
    * Other Database Related
          o Added $this->DB->save_queries variable to DB driver, enabling queries to get saved or not. Previously they were always saved.
          o Added $this->db->dbprefix() to manually add database prefixes.
          o Added 'random' as an order_by() option , and removed "rand()" as a listed option as it was MySQL only.
          o Added a check for NULL fields in the MySQL database backup utility.
          o Added "constrain_by_prefix" parameter to db->list_table() function. If set to TRUE it will limit the result to only table names with the current prefix.
          o Deprecated from Active Record; getwhere() for get_where(); groupby() for group_by(); havingor() for having_or(); orderby() for order_by; orwhere() for or_where(); and orlike() for or_like().
          o Modified csv_from_result() to output CSV data more in the spirit of basic rules of RFC 4180.
          o Added 'char_set' and 'dbcollat' database configuration settings, to explicitly set the client communication properly.
          o Removed 'active_r' configuration setting and replaced with a global $active_record setting, which is more in harmony with the global nature of the behavior (#1834).
    * Core changes
          o Added ability to load multiple views, whose content will be appended to the output in the order loaded.
          o Added the ability to auto-load Models.
          o Reorganized the URI and Routes classes for better clarity.
          o Added Compat.php to allow function overrides for older versions of PHP or PHP environments missing certain extensions / libraries
          o Added memory usage, GET, URI string data, and individual query execution time to Profiler output.
          o Deprecated Scaffolding.
          o Added is_really_writable() to Common.php to provide a cross-platform reliable method of testing file/folder writability.
    * Libraries
          o Changed the load protocol of Models to allow for extension.
          o Strengthened the Encryption library to help protect against man in the middle attacks when MCRYPT_MODE_CBC mode is used.
          o Added Flashdata variables, session_id regeneration and configurable session update times to the Session class.
          o Removed 'last_visit' from the Session class.
          o Added a language entry for valid_ip validation error.
          o Modified prep_for_form() in the Validation class to accept arrays, adding support for POST array validation (via callbacks only)
          o Added an "integer" rule into the Validation library.
          o Added valid_base64() to the Validation library.
          o Documented clear() in the Image Processing library.
          o Changed the behaviour of custom callbacks so that they no longer trigger the "required" rule.
          o Modified Upload class $_FILES error messages to be more precise.
          o Moved the safe mode and auth checks for the Email library into the constructor.
          o Modified variable names in _ci_load() method of Loader class to avoid conflicts with view variables.
          o Added a few additional mime type variations for CSV.
          o Enabled the 'system' methods for the XML-RPC Server library, except for 'system.multicall' which is still disabled.
    * Helpers & Plugins
          o Added link_tag() to the HTML helper.
          o Added img() to the HTML helper.
          o Added ability to "extend" Helpers.
          o Added an email helper into core helpers.
          o Added strip_quotes() function to string helper.
          o Added reduce_multiples() function to string helper.
          o Added quotes_to_entities() function to string helper.
          o Added form_fieldset(), form_fieldset_close(), form_label(), and form_reset() function to form helper.
          o Added support for external urls in form_open().
          o Removed support for db_backup in MySQLi due to incompatible functions.
          o Javascript Calendar plugin now uses the months and days from the calendar language file, instead of hard-coded values, internationalizing it.
    * Documentation Changes
          o Added Writing Documentation section for the community to use in writing their own documentation.
          o Added titles to all user manual pages.
          o Added attributes into <html> of userguide for valid html.
          o Added Zip Encoding Class to the table of contents of the userguide.
          o Moved part of the userguide menu javascript to an external file.
          o Documented distinct() in Active Record.
          o Documented the timezones() function in the Date Helper.
          o Documented unset_userdata in the Session class.
          o Documented 2 config options to the Database configuration page.
 
Bug fixes for Version 1.6.0
 
    * Fixed a bug (#1813) preventing using $CI->db in the same application with returned database objects.
    * Fixed a bug (#1842) where the $this->uri->rsegments array would not include the 'index' method if routed to the controller without an implicit method.
    * Fixed a bug (#1872) where word_limiter() was not retaining whitespace.
    * Fixed a bug (#1890) in csv_from_result() where content that included the delimiter would break the file.
    * Fixed a bug (#2542)in the clean_email() method of the Email class to allow for non-numeric / non-sequential array keys.
    * Fixed a bug (#2545) in _html_entity_decode_callback() when 'global_xss_filtering' is enabled.
    * Fixed a bug (#2668) in the parser class where numeric data was ignored.
    * Fixed a bug (#2679) where the "previous" pagination link would get drawn on the first page.
    * Fixed a bug (#2702) in _object_to_array that broke some types of inserts and updates.
    * Fixed a bug (#2732) in the SQLite driver for PHP 4.
    * Fixed a bug (#2754) in Pagination to scan for non-positive num_links.
    * Fixed a bug (#2762) in the Session library where user agent matching would fail on user agents ending with a space.
    * Fixed a bug (#2784) $field_names[] vs $Ffield_names[] in postgre and sqlite drivers.
    * Fixed a bug (#2810) in the typography helper causing extraneous paragraph tags when string contains tags.
    * Fixed a bug (#2849) where arguments passed to a subfolder controller method would be incorrectly shifted, dropping the 3rd segment value.
    * Fixed a bug (#2858) which referenced a wrong variable in the Image class.
    * Fixed a bug (#2875)when loading plugin files as _plugin. and not _pi.
    * Fixed a bug (#2912) in get_filenames() in the File Helper where the array wasn't cleared after each call.
    * Fixed a bug (#2974) in highlight_phrase() that caused an error with slashes.
    * Fixed a bug (#3003) in the Encryption Library to support modes other than MCRYPT_MODE_ECB
    * Fixed a bug (#3015) in the User Agent library where more then 2 languages where not reported with languages().
    * Fixed a bug (#3017) in the Email library where some timezones were calculated incorrectly.
    * Fixed a bug (#3024) in which master_dim wasn't getting reset by clear() in the Image library.
    * Fixed a bug (#3156) in Text Helper highlight_code() causing PHP tags to be handled incorrectly.
    * Fixed a bug (#3166) that prevented num_rows from working in Oracle.
    * Fixed a bug (#3175) preventing certain libraries from working properly when autoloaded in PHP 4.
    * Fixed a bug (#3267) in the Typography Helper where unordered list was listed "un.
    * Fixed a bug (#3268) where the Router could leave '/' as the path.
    * Fixed a bug (#3279) where the Email class was sending the wrong Content-Transfer-Encoding for some character sets.
    * Fixed a bug (#3284) where the rsegment array would not be set properly if the requested URI contained more segments than the routed URI.
    * Removed extraneous load of $CFG in _display_cache() of the Output class (#3285).
    * Removed an extraneous call to loading models (#3286).
    * Fixed a bug (#3310) with sanitization of globals in the Input class that could unset CI's global variables.
    * Fixed a bug (#3314) which would cause the top level path to be deleted in delete_files() of the File helper.
    * Fixed a bug (#3328) where the smiley helper might return an undefined variable.
    * Fixed a bug (#3330) in the FTP class where a comparison wasn't getting made.
    * Removed an unused parameter from Profiler (#3332).
    * Fixed a bug in database driver where num_rows property wasn't getting updated.
    * Fixed a bug in the upload library when allowed_files wasn't defined.
    * Fixed a bug in word_wrap() of the Text Helper that incorrectly referenced an object.
    * Fixed a bug in Validation where valid_ip() wasn't called properly.
    * Fixed a bug in Validation where individual error messages for checkboxes wasn't supported.
    * Fixed a bug in captcha calling an invalid PHP function.
    * Fixed a bug in the cookie helper "set_cookie" function. It was not honoring the config settings.
    * Fixed a bug that was making validation callbacks required even when not set as such.
    * Fixed a bug in the XML-RPC library so if a type is specified, a more intelligent decision is made as to the default type.
    * Fixed an example of comma-separated emails in the email library documentation.
    * Fixed an example in the Calendar library for Showing Next/Previous Month Links.
    * Fixed a typo in the database language file.
    * Fixed a typo in the image language file "suppor" to "support".
    * Fixed an example for XML RPC.
    * Fixed an example of accept_charset() in the User Agent Library.
    * Fixed a typo in the docblock comments that had CodeIgniter spelled CodeIgnitor.
    * Fixed a typo in the String Helper (uniquid changed to uniqid).
    * Fixed typos in the email Language class (email_attachment_unredable, email_filed_smtp_login), and FTP Class (ftp_unable_to_remame).
    * Added a stripslashes() into the Upload Library.
    * Fixed a series of grammatical and spelling errors in the language files.
    * Fixed assorted user guide typos.


---------------
I'm smart enough to know that I'm dumb. - Livres d'occase
n°1697600
FlorentG
Unité de Masse
Posté le 05-03-2008 à 15:12:55  profilanswer
 

[:reddit]
 
Intéressant à lire : http://pookey.co.uk/blog/index.php [...] -mail.html
 
Nos implémentations de la design pattern MVC sont-elles complètement nazes ?


---------------
last.fmflickr
n°1697603
Masklinn
í dag viðrar vel til loftárása
Posté le 05-03-2008 à 15:20:02  profilanswer
 

FlorentG a écrit :

[:reddit]
 
Intéressant à lire : http://pookey.co.uk/blog/index.php [...] -mail.html
 
Nos implémentations de la design pattern MVC sont-elles complètement nazes ?


 [:prozac]


---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1697608
FlorentG
Unité de Masse
Posté le 05-03-2008 à 15:22:46  profilanswer
 

C'est masculin ? Ou tu veux dire que MVC n'est pas vraiment un(e) design pattern... Plutôt une architecture qui va englober plusieurs patterns.
 
Bon sinon faut lancer le débat. Même si sa rant est assez mal argumentée, la vraie question est : est-il possible de faire du vrai MVC dans le domaine du web ?  
 
Quel est le vrai rôle de chaque composant ? Le Controller doit-il passer les données à la View, ou seulement le model ?


---------------
last.fmflickr
n°1697614
skeye
Posté le 05-03-2008 à 15:28:28  profilanswer
 

Probablement nazes, oui.[:dawa]
D'ailleurs perso dans l'optique où je fais des devs très spécifiques, je préfère faire ma popote approchant vaguement d'un MVC que du vrai MVC - ce qui em ferait perdre du temps plus qu'autre chose...


---------------
Can't buy what I want because it's free -
n°1697618
skeye
Posté le 05-03-2008 à 15:34:17  profilanswer
 

...en tout cas il a pas tort, le monsieur - perso ce que j'ai vu des gens utilisant symfony par exemple, c'est qu'il ne mettent quasiment plus rien dans le modèle - en-dehors de ce que génère l'ORM, et la vue accède directement aux membres des controleurs...je trouve pas ça super clean.[:petrus75]


---------------
Can't buy what I want because it's free -
n°1697627
FlorentG
Unité de Masse
Posté le 05-03-2008 à 15:41:39  profilanswer
 

skeye a écrit :

et la vue accède directement aux membres des controleurs...je trouve pas ça super clean.[:petrus75]


Ah ouais quand-même :sweat:
 
Moi j'ai essayé de séparer le plus possibles les différents composants. Genre dans la plupart des cas, le Controller ne fait qu'instancier un Modèle et le refile à une View. La View ensuite sélectionne et prépare les données, qui seront filées à la template.
 
Alors c'est sûr, c'est super-séparé. Au final, la template n'a accès qu'aux données que la view lui a transmise. Y'a plus du tout de notion de Controller ou de Model dans notre template. Juste des données à afficher.
 
Après c'est parfois un peu lourdingue, faut à chaque fois créer une classe View qui souvent ne fait presque rien. Je me demande si je ne vais pas passer à un truc du style Passive View, où le controller peut s'interfacer directement à une template sans passer par une View :/
 
Finalement le problème vient du Controller : quel est son vrai rôle. Médiateur entre le modèle et la view ? Peut-il s'interfacer directement avec une template ? Quelle est alors la vraie distinction View/Template... Est-ce que la template du coup est considérée comme une View ?
 
Y'a donc déjà un problème de vocabulaire. Par quoi designe-t-on Model, View, Controller et Template. Si on définit déjà bien leur rôle, tout sera plus clair.
 
Messieurs, débattons :D


---------------
last.fmflickr
n°1697631
skeye
Posté le 05-03-2008 à 15:45:14  profilanswer
 

Perso j'ai squeezé la partie Vue. J'en utilisais une au départ, mais ça avait tellement peu d'intérêt que je balance tout aux templates à-partir du contrôleur, maintenant.
C'est mon moteur de templates, ma Vue, en gros.[:joce]


---------------
Can't buy what I want because it's free -
n°1697648
drasche
puppetmaster
Posté le 05-03-2008 à 15:50:59  profilanswer
 

Chuis content de lire l'article parce que je vais assez dans la même direction que le mec [:petrus75]
 
* le contrôleur lit les inputs et les passent au modèle
* le contrôleur demande au modèle de traiter les données (charger, valider, sauver)
* le contrôleur file le modèle à la vue
* le contrôleur demande à la vue de produire une sortie (que ce soit un e-mail ou une page web)
 
Concernant la vue, il m'arrive de créer une seule classe pour produire plusieurs outputs parce que les données requises peuvent être les mêmes.
 
J'ai bon jusque là? [:petrus dei]


---------------
blabla@prog est une plateforme de blogging collaborative :o (c) Masklinn -☠- Don't cloud my hatred with facts. (@angrydeveloper)
n°1697665
FlorentG
Unité de Masse
Posté le 05-03-2008 à 15:56:34  profilanswer
 

skeye a écrit :

C'est mon moteur de templates, ma Vue, en gros.[:joce]


Ouais, ça ressemble alors à la Passive View de notre ami Fowler. Maintenant ce qui est assez relou, c'est qu'un paquet d'article sur MVC sont difficilement applicables au web, faudrait presque renommer tout ça en quelque chose plus en rapport.
 
Dans mon framework, parfois la View a un interêt minime. Soit elle refile à la template ce que le controller lui a donné, soit elle ne fait que récupérer un truc dans le model. Je pourrait la schunter sans problèmes.
 
Parfois aussi, elle a un rôle important, parce qu'elle prépare les données. Genre dans une boutique en ligne, affichage d'une liste de catégorie, on refile le model et la catégorie en cours à la view, et elle se charge de préparer un fil d'ariane, de sélectionner les sous-catégories et les sous-produits, etc. Elle peut aussi sélectionner les catégories soeurs suivant une option de configuration. C'est un peu moins le rôle du controller dans ce cas là, vu que les données sont préparées spécifiquement pour une view au format HTML.
 
On arrive à une autre question, est-ce qu'il est vraiment possible de faire un Controller totalement indépendant du résultat final. Genre dans l'article que j'ai posté, y'en a qui ont critiqué le fait qu'on puisse faire une redirection vers une autre page dans le Controller. Or, une redirection implique le format de destination.
 
Ou alors est-ce qu'on jette tout ça, et un Controller se verrait lié au format final ?


---------------
last.fmflickr
n°1697669
skeye
Posté le 05-03-2008 à 15:57:11  profilanswer
 

drasche a écrit :

Chuis content de lire l'article parce que je vais assez dans la même direction que le mec [:petrus75]
 
* le contrôleur lit les inputs et les passent au modèle
* le contrôleur demande au modèle de traiter les données (charger, valider, sauver)
* le contrôleur file le modèle à la vue
* le contrôleur demande à la vue de produire une sortie (que ce soit un e-mail ou une page web)
 
Concernant la vue, il m'arrive de créer une seule classe pour produire plusieurs outputs parce que les données requises peuvent être les mêmes.
 
J'ai bon jusque là? [:petrus dei]


 
A mon avis le monsieur aurait un soucis dès le premier point.[:dawa]
Dans la théorie à moins que je me trompe l'input utilisateur est traité par la vue.[:petrus75]
Ca change pas énormément, mais normalement le controleur doit instancier la vue, et lui demander de lui fournir l'input utilisateur.[:dawa]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  35  36  37  ..  62  63  64  65  66  67

Aller à :
Ajouter une réponse
 

Sujets relatifs
Comment créer une architecture propre et fonctionelle...[Débutant] Webdesigner a besoin d'aide pour PHP
script PHP style explorateur windowsPHP et MS SQL
[PHP] envoi d'images qui se dimentionne et s'ajoute direct sur 1pageAfficher le temps utilisé pour générer une page PHP
[PHP] connexion bdd différente selon page locale ou sur serveur ?Afficher une image générée par un script PHP dans un PDF ?
Utilisation d'une variable en Flash depuis PHPErreur de forum PHP
Plus de sujets relatifs à : Model View Controller (MVC) - Architecture des applications PHP


Hit-Parade
Copyright © 1997-2012 Hardware.fr SARL / Groupe LDLC / LesNumeriques.com / Version anglaise du site: BeHardware