[PHP] Comment définir une variable contenant une include ?

Comment définir une variable contenant une include ? [PHP] - PHP - Programmation

Marsh Posté le 16-07-2009 à 21:45:24    

Bonjour à tous,
 
Petite question toute bète mais qui me pose problème.
Voici mon code actuel :

Code :
  1. $variable = include('fichier.php');


Je souhaiterais que l'include soit contenue dans la variable et que quand j'écho la variable, ça lance l'include du fichier.
Le problème c'est que dès que je déclare l'include, ça l'active tout de suite. :/
Si je mets des guillemets, quand je l'écho, ça écho comme du texte.
 
Bref, si quelqu'un peut m'aider, ce serait super !
 
Pour expliquer rapidement l'utilisation : un fichier config qui switch en fonction de l'id que je donne, pour chaque id, soit j'ai une variable de contenu, soit une variable d'include, et j'echo cette variable dans mon template.

Reply

Marsh Posté le 16-07-2009 à 21:45:24   

Reply

Marsh Posté le 16-07-2009 à 22:19:04    

idée au hasard (pas testé)
 
$variable=file_get_contents ('fichier.php');


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Marsh Posté le 16-07-2009 à 22:27:34    

Je vois absolument aucune application à ce que tu veux faire.. Mais ce qui s'en rapproche le plus est d'utiliser la fonction eval() à la place de ton echo :

 
Code :
  1. $variable = "include('fichier.php')";
  2. ...
  3. eval($variable);

Message cité 1 fois
Message édité par esox_ch le 16-07-2009 à 22:27:48

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 16-07-2009 à 22:33:12    

Je vais tester ça, mais pour l'appli c'est simple.
 
Imagine un site vitrine sans BDD, dans ton template tu as toute une zone commune fixe et une zone dynamique pour le contenu. Pour chaque page soit tu as un texte court soit tu as quelque chose de plus complexe. Et dans la zone dynamique de ton template tu as <?php echo $variable ?>
 
et tu as un fichier de config qui switch en fonction de l'id de la page pour définir $variable, soit $variable = 'texte'; soit $variable = include(fichier.php); si jamais ça nécessite d'inclure un fichier tout entier.
 
D'habitude, j'utilise un système plus complexe d'include dynamique, mais là j'essaye de faire un truc où tu n'as juste qu'à modifier ton fichier de config et au pire un ou deux autres fichiers externes pour les pages complexes, afin d'éviter d'avoir une page de contenu différente pour chaque page.


Message édité par Alekusu2 le 16-07-2009 à 22:36:47
Reply

Marsh Posté le 16-07-2009 à 22:55:00    

Oui mais non...
 
tu fais juste un if qui switch entre un echo et un include ... pas besoin de chercher midi à 14h


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 16-07-2009 à 23:40:13    

esox_ch a écrit :

Oui mais non...
 
tu fais juste un if qui switch entre un echo et un include ... pas besoin de chercher midi à 14h


 
Je sais que j'ai cette possibilité là.
Mais ma question n'est pas "quel est le meilleur choix" c'est juste de savoir répondre à la problématique que je donne, car moi je bloquais dessus et je voulais savoir comment faire si un jour j'étais dans l'obligation d'utiliser cette méthode.

Reply

Marsh Posté le 17-07-2009 à 00:37:03    

Au lieu de  
 

Code :
  1. <?php echo $variable ?>


Tu mets
 

Code :
  1. <?php include("fichier.php" ); ?>


Et encore mieux, si tu veux choisir ton contenu tu mets

Code :
  1. $variable = "fichier.php"; // Ici tu choisis la source
  2. <?php include($variable); ?> // Et tu l'affiches.


Message édité par Pascal le nain le 17-07-2009 à 00:37:47
Reply

Marsh Posté le 17-07-2009 à 01:39:51    

Merci pour ta participation mais tu ne réponds pas du tout à ma question.
Je sais faire une include toute simple, ce n'est pas la question.
 
Je veux pouvoir avoir le choix entre définir une variable avec du texte ou avec un include fichier, sans utiliser de if, de switch, etc.  
Ta proposition ne fonctionne qu'avec un fichier, si $variable = "coucou"; ça marche évidemment pas...
 
Ma question c'est une variable que je définie comme je veux (cf ci dessus) et après avec la fonction qu'on veut (echo, include, etc), ça affiche soit l'include soit le contenu, tout ça sans un if ni un switch.


Message édité par Alekusu2 le 17-07-2009 à 01:47:48
Reply

Marsh Posté le 17-07-2009 à 10:17:27    

Alors la réponse est non, non tu ne peux pas faire ça sans if ou autre


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 18-11-2009 à 14:41:28    

esox_ch a écrit :

Je vois absolument aucune application à ce que tu veux faire.. Mais ce qui s'en rapproche le plus est d'utiliser la fonction eval() à la place de ton echo :


je vais t'en donner une moi de raison... j'ai un formulaire assez énorme que je veux après enregistrer, ce que je voulais faire aussi c'est:

Code :
  1. $var=include (text.php);
  2. $fichier=fopen($chemin,"w" )
  3. fwrite ($fichier,$var);
  4. fclose ($fichier);


mais sa marche pas du tout, ca me crée bien le fichier mais apparemment $var a la valeur "1" est non la valeur de tous ce qui a dans "text.php"
je veux bien un peu d'aide sur cette question si vous savez comment faire.
merci

Reply

Marsh Posté le 18-11-2009 à 14:41:28   

Reply

Marsh Posté le 18-11-2009 à 15:31:57    

et dans ton text.php y'a quoi par exemple ?

 

sinon avec eval,

 
Code :
  1. $text = file_get_contents('text.php');
  2. file_put_contents('monfichier', eval($text));
 

rergarde du coté du buffer aussi

 

http://fr.php.net/manual/fr/ref.outcontrol.php

 
Code :
  1. include (text.php);
  2.  
  3. $text = ob_get_contents();
  4.  
  5. file_put_contents('monfichier', $text);



Message édité par stealth35 le 18-11-2009 à 15:54:10
Reply

Marsh Posté le 18-11-2009 à 15:55:56    

J'ai pas tout lu, mais à première vue si tu as besoin de faire ça c'est qu'il y a un truc qui ne va pas dans la conception du bouzin.[:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 16:03:20    

=> skeye
Ou l'envie forte de faire un code imbitable et impossible a maintenir, au choix :(

Reply

Marsh Posté le 18-11-2009 à 16:10:37    

non moi je m'en sert, pour ma vue dans mon MVC

 

imagé une layout avec    $this-content,
et un fichier php avec tout le traitement du 'content' dedans

 

c'est un peu délicat, au debut on a tendance a faire

 

include 'header.php'
include 'content.php'
include 'footer.php'

 

la non,  le layout est en 1 seul fichier, ca parmet de faire  par exemple des block (admin, message...) dynamique,  et des les inseres apres

 

petit exemple d'une parti de mon code

 
Code :
  1. public function render($controller, $action)
  2.         {            
  3.             $layout = "views/$controller/$action.phtml";            
  4.             
  5.             ob_start();
  6.             require_once $layout;
  7.                         
  8.             $this->content = ob_get_contents();            
  9.             ob_end_clean();
  10.             
  11.             if(!$this->isAJAX())
  12.             {            
  13.                 require_once 'layout.php';
  14.             }
  15.             else
  16.             {
  17.                 echo $this->content;
  18.             }
  19.             
  20.         }
  21.         
  22.         public function isAJAX()
  23.         {
  24.             return @$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
  25.         }


Message édité par stealth35 le 18-11-2009 à 16:11:50
Reply

Marsh Posté le 18-11-2009 à 16:16:18    

Bah désolé de te dire ça, mais je trouve ça laid.[:petrus75]
Et je parle même pas du @$_SERVER... [:delarue5]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 16:21:57    

qu'est ce que tu proposerais comme solution adapté ?
bon apres le @ on a rien vu...

Reply

Marsh Posté le 18-11-2009 à 16:32:29    

stealth35 a écrit :

qu'est ce que tu proposerais comme solution adapté ?


 
Franchement? J'ai même pas compris ce que tu essayes de faire avec ça.:D
 
Dans le doute et complètement au pif, je dirais que tu pourrais avoir une sorte de classe Layout qui maintient un liste d'objets affichables (tes blocs), et que tu initialises ta vue avec une instance de layout et une des instances de blocs.
Là-dessus, ton layout n'a a priori aucun mal à demander aux blocs de s'afficher au bon endroit...
 
Bon après j'ai peut-être rien compris à ton problème hein.[:dawa]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 16:41:17    

c'est un systeme de template rien de plus.

 

que tu fasses des liste d'objet ou pas, a un moment tu va devoir te retrouver avec :

 
Code :
  1. $layout->block_message = include('block_message.php');
 

avec dans ton block_message.php

 
Code :
  1. <?php foreach($user->messsages as message): ?>
  2. <p><?php echo $messsage ?></p>
  3. <?php endforeach ?>
 
Code :
  1. <html>
  2.    <body>
  3.       <div id="block-message">
  4.         <?php echo $this->block_messsage ?>
  5.       </div>
  6.    </body>
  7. </html>

Message cité 1 fois
Message édité par stealth35 le 18-11-2009 à 16:43:34
Reply

Marsh Posté le 18-11-2009 à 16:52:40    

stealth35 a écrit :

a un moment tu va devoir te retrouver avec :
 

Code :
  1. $layout->block_message = include('block_message.php');




 
Je vois toujours pas l'intérêt.:D
 
Pour reprendre le truc de tout à l'heure, tu auras une classe Layout de ce style  
 

Code :
  1. <?php
  2. class Layout{
  3.     
  4.     private $blocks;
  5. [...]    
  6.     function display(){
  7.         $this->beforeContent();
  8.         foreach($this->blocks as $block){
  9.             $block->display();
  10.         }
  11.         $this->afterContent();
  12.     }
  13.     
  14. }


 
Après il est très possible que la fonction display() de ton bloc "admin" se contente de faire un include("bloc_admin.php" ), mais il n'y a pas un eval ou je en sais quelle connerie du genre dans ces histoires...[:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 16:57:14    

sauf que a quelle moment tu lui insere la variable de l'utilisateur,
 
et surtout dans ton $this->beforeContent() et $this->afterContent()
c'est pareil faut que le code soit séparé, donc finis le template
 
on retourne a mon histoire du debut avec le
 

Code :
  1. include 'header.php'
  2. include 'content.php'
  3. include 'footer.php'


Reply

Marsh Posté le 18-11-2009 à 17:01:11    

Dans mon exemple, chaque bloc sait s'afficher, il connait les variables dont il a besoin.
Et les beforeContent/afterContent savent afficher tout ce qui est du domaine du layout et non du contenu spécifique à la page demandée.
 
Bref, laisse tomber, je comprends rien à ce que tu racontes, on doit pas venir de la même planète.:D


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 17:11:37    

héhé  :pt1cable:

 

je t'invite a faire un truc tout bete (si ta un peu de temps biensur)

 

ton layout.html

 
Code :
  1. <html>
  2.         <body>
  3.            <div id="content">
  4.              <?php echo $this->content ?>
  5.            </div>
  6.         </body>
  7.      </html>
 

tes 2 pages

 

page info.php

Code :
  1. <ul>
  2. <?php for($i = 0; $i< 10; $i++): ?>
  3. <li>Info numero : <?php echo $i ?></li>
  4. <?php  endfor ?>
  5. <ul>


page message.php

Code :
  1. <ul>
  2. <?php for($i = 0; $i< 10; $i++): ?>
  3. <li>Message numero : <?php echo $i ?></li>
  4. <?php  endfor ?>
  5. <ul>
 

maintenant,  quand tu fais index.php?action=info    :  ca affiche les info (décoré du layout, donc a la place de $this->content), et pareil avec index.php?action=message

 


Message cité 1 fois
Message édité par stealth35 le 18-11-2009 à 17:39:20
Reply

Marsh Posté le 18-11-2009 à 17:50:58    

stealth35 a écrit :

héhé  :pt1cable:

 

je t'invite a faire un truc tout bete (si ta un peu de temps biensur)

 


 

C'est bien parce-que j'aimerais bien comprendre ce qui te bloque hein...[:joce]

 

index.php:

 
Code :
  1. <?php
  2.  
  3. require 'Brol.php';
  4.  
  5. $l = new Layout();
  6. $l->addBlock(new MessageBlock());
  7. $l->addBlock(new InfoBlock());
  8.  
  9. $l->display();
 

Brol.php :

Code :
  1. <?php
  2.  
  3. interface Displayable{
  4.     function display();
  5. }
  6.  
  7. class InfoBlock implements Displayable{
  8.  
  9.     function display(){
  10.         include 'info.phtml';
  11.     }
  12. }
  13.  
  14. class MessageBlock implements Displayable{
  15.  
  16.     function display(){
  17.         include 'message.phtml';
  18.     }
  19. }
  20.  
  21. class Layout{
  22.  
  23.     private $blocks;
  24.  
  25.  
  26.     function __construct(){
  27.         $this->blocks = array();
  28.     }
  29.  
  30.     function addBlock(Displayable $block){
  31.         $this->blocks[] = $block;
  32.     }
  33.  
  34.     function display(){
  35.         include 'layout.phtml';
  36.     }
  37.  
  38.     function content(){
  39.         foreach($this->blocks as $block){
  40.             $block->display();
  41.         }
  42.     }
  43. }
 


layout.phtml :

 
Code :
  1. <html>
  2.    <body>
  3.       <div id="content">
  4.          <?php echo $this->content() ?>
  5.        </div>
  6.     </body>
  7. </html>
 

message.phtml

Code :
  1. <ul>
  2. <?php for($i = 0; $i< 10; $i++): ?>
  3.     <li>Message numero : <?php echo $i ?></li>
  4. <?php endfor; ?>
  5. </ul>
 

info.phtml :

Code :
  1. <ul>
  2. <?php for($i = 0; $i< 10; $i++): ?>
  3. <li>Info numero : <?php echo $i ?></li>
  4. <?php endfor; ?>
  5. <ul>
 

Résultat :

 
Code :
  1. <html>
  2.    <body>
  3.       <div id="content">
  4.          <ul>
  5.     <li>Message numero : 0</li>
  6.     <li>Message numero : 1</li>
  7.     <li>Message numero : 2</li>
  8.     <li>Message numero : 3</li>
  9.     <li>Message numero : 4</li>
  10.     <li>Message numero : 5</li>
  11.     <li>Message numero : 6</li>
  12.     <li>Message numero : 7</li>
  13.     <li>Message numero : 8</li>
  14.     <li>Message numero : 9</li>
  15. </ul><ul>
  16. <li>Info numero : 0</li>
  17. <li>Info numero : 1</li>
  18. <li>Info numero : 2</li>
  19. <li>Info numero : 3</li>
  20. <li>Info numero : 4</li>
  21. <li>Info numero : 5</li>
  22. <li>Info numero : 6</li>
  23. <li>Info numero : 7</li>
  24. <li>Info numero : 8</li>
  25. <li>Info numero : 9</li>
  26. <ul>        </div>
  27.     </body>
  28. </html>


Message édité par skeye le 18-11-2009 à 17:52:31

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 19:29:18    

ca pourrais etre une alternative, mais trop limité parce que on est obligé de créer une fonction,  
 
j'ai un autre cas, ou je suis obligé comme ca de fait de l'asynchrone,  
c'est un template de forumlaire (avec des champs genre option qui peuvent etre different), ce formulaire je le charge via DomDocument et je faire un traitrement derriere pour rempli les value, et ensuite j'affiche le forumaire rempli
 
mais je pourrais pas faire
 
$dom = new DomDocument();
$dom->load(form.php);
 
je vai me retrouve avec mes balises '<?php ?>' et le code dedan
 
ducoup  
 
ob_start();
require_once('form.php');
$form = ob_get_contents();            
ob_end_clean();
 
$dom = new DomDocument();
$dom->loadXML($form);
 
et la je peu traité mon truc
         

Reply

Marsh Posté le 18-11-2009 à 19:34:51    

stealth35 a écrit :

ca pourrais etre une alternative, mais trop limité parce que on est obligé de créer une fonction,  

 

Limité par quoi?

 
stealth35 a écrit :

ce formulaire je le charge via DomDocument et je faire un traitrement derriere pour rempli les value, et ensuite j'affiche le forumaire rempli


 [:everything4free]


Message édité par skeye le 18-11-2009 à 19:37:10

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 20:01:24    

donc en fait, tu as pris un système qui a des contraintes pire qu'un vrai système de template ( genre smarty ) mais pas les avantages


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

Reply

Marsh Posté le 18-11-2009 à 20:15:18    

Limité par quoi?
par l'écriture de fonction supplémentaire qu'on pas leur place dans un model MVC, et que par se principe de pattern, dans la vue ca doit etre uniquement des données de vue, donc pas de traitement derriere, mais je parle uniquement pour le mvc, apres y'a toujours plein de manière de faire les choses, et souvent y'a quelqu'un qui la deja fait et en mieux. En tout cas pour le buffer ca ma jamais choquer de ul'tilisé, et ca reviens assez souvent ce type de pratique (avec le require) dans les sources de framework (ZF par ex),  
 
 
 apres pour l'histoire du formulaire, c'est alternative que j'ai trouver, ('aura que moi un coup de Zend_Form et c'est réglé mais je dois dev sans framework de ce type), et le coup des  
 
<input type="text" name="test" value="<?php echo $this->test ?>" />
 
pareil ca ils en veulent pas  :(  
 
en tout cas si t'as des trucs a partagé sur la gestion de template et les formulaires je suis preneur  :love:

Reply

Marsh Posté le 18-11-2009 à 20:16:08    

flo850 a écrit :

donc en fait, tu as pris un système qui a des contraintes pire qu'un vrai système de template ( genre smarty ) mais pas les avantages


 
ca te choque toi aussi cette manip la ?

Reply

Marsh Posté le 18-11-2009 à 20:39:18    

stealth35 a écrit :

Limité par quoi?
par l'écriture de fonction supplémentaire qu'on pas leur place dans un model MVC

 

Ok, donc tu dis juste n'importe-quoi parce-que t'essaies de suivre un pattern que t'as même pas compris.[:dawak]
Toutes les classes que j'ai écrites plus tôt feraient partie de la couche vue dans le pattern MVC.

 


stealth35 a écrit :

pour l'histoire du formulaire, c'est alternative que j'ai trouver, ('aura que moi un coup de Zend_Form et c'est réglé mais je dois dev sans framework de ce type), et le coup des

 

<input type="text" name="test" value="<?php echo $this->test ?>" />

 

pareil ca ils en veulent pas  :(


qui ça, "ils"?[:pingouino]


Message édité par skeye le 18-11-2009 à 20:39:44

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 20:41:30    

stealth35 a écrit :


ca te choque toi aussi cette manip la ?


ça te surprend?
Tu utilises un parseur DOM pour ajouter du contenu dans un formulaire que tu génères toi-même au même moment, et ça te parait parfaitement normal?[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 20:50:36    

je suis pas en freelance, j'ai des obligations. (malheuseusement)
 

Citation :

Ok, donc tu dis juste n'importe-quoi parce-que t'essaies de suivre un pattern que t'as même pas compris.[:dawak]
Toutes les classes que j'ai écrites plus tôt feraient partie de la couche vue dans le pattern MVC.


 
je suis pas d'accord, dans la partie Vue, doit y avoir aucun traitement et doit juste affiche le traitement, or toi la ducoup dans le layout tu fait le traitement pour que t'appelle la fonction
 
(on aurai du ouvrir un autre topic du coup)

Reply

Marsh Posté le 18-11-2009 à 20:52:58    

skeye a écrit :


ça te surprend?
Tu utilises un parseur DOM pour ajouter du contenu dans un formulaire que tu génères toi-même au même moment, et ça te parait parfaitement normal?[:pingouino]


 
pas au meme moment puisque qu'il est generer avant.

Reply

Marsh Posté le 18-11-2009 à 20:54:23    

la vue ne peux pas récupérer des données, ni faire de traitement sur ces même données ( mais elle peut demander aux classes du modèles de faire le taf si besoin est )  
 
la vue peut donc tout à fait faire les traitements nécessaires à son bon fonctionnement.


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

Reply

Marsh Posté le 18-11-2009 à 20:58:34    

mais le coup  du buffer, tu trouves ca bizzar aussi ?

Reply

Marsh Posté le 18-11-2009 à 21:30:53    

stealth35 a écrit :


je suis pas d'accord, dans la partie Vue, doit y avoir aucun traitement et doit juste affiche le traitement, or toi la ducoup dans le layout tu fait le traitement pour que t'appelle la fonction


c'est bien ce que je dis, tu n'as pas compris. mvc...le but du jeu c'est de séparer les 3 couches, pas d'interdire des traitements de fonctionnement internes dans chaque couche, au contraire.
 

stealth35 a écrit :


 
pas au meme moment puisque qu'il est generer avant.


 
dans le traitement de la même requête, si tu préfères...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-11-2009 à 21:44:48    

J'crois y'a du malentendu là [:pingouino]

 

Si j'ai bien pigé, notre ami veut un <form> dans une template genre format HTML, avec possiblement du PHP, ouvrir cette template avec DOM, et y placer les valeurs dans les inputs [:petrus dei] J'attend confirmation

Message cité 1 fois
Message édité par FlorentG le 18-11-2009 à 21:45:21
Reply

Marsh Posté le 18-11-2009 à 22:10:56    

FlorentG a écrit :

J'crois y'a du malentendu là [:pingouino]

 

Si j'ai bien pigé, notre ami veut un <form> dans une template genre format HTML, avec possiblement du PHP, ouvrir cette template avec DOM, et y placer les valeurs dans les inputs [:petrus dei] J'attend confirmation

 

oui c'est ca, (meme si c'est pas le fond du topic, de fil en aiguille on est parti la dessus avec skeye), j'essaye a la base de lui montrer l'interet d'utiliser le buffer,

 

la c'etait l'exemple que tu dis, donc un template html avec du php de dedan et a manipuler apres avec DomDocument

 

(dans les grandes ligne)

Code :
  1. require_once('form.php');
  2. $form = ob_get_contents();            
  3.  
  4. $dom = new DomDocument();
  5. $dom->loadXML($form);
  6.  
  7. // tout le blabla avec Xpath pour checker les name et remplir les value, ou textare, radio ...
 


tout ca est dans une class Form, ce qui me permet dans mon controller de faire par ex:

 
Code :
  1. function  editAction
  2. {
  3.    $user = $userTable->find(1);
  4.    $form = new Form();
  5.    $form->load('forms/user.phtml');
  6.   $form->populate($user);
  7.  
  8. $this->view->form = $form;
  9. }
  


Message édité par stealth35 le 18-11-2009 à 22:12:59
Reply

Marsh Posté le 18-11-2009 à 22:33:30    

J'ai fait exactement ça dans mon machin [:dawak]

 

C'est le truc le plus simple pour faire des p'tits formulaires sans se taper de PHP ou quoique-ce-soit [:romf]

 

Déjà hors de question de se taper des trucs styles :

Code :
  1. <input type="text" id="machin" name="machin" value="<?php echo htmlspecialchars($value, 'utf-8', ENT_QUOTES) ?>" />


[surtout qu'avec les intégrateurs, les htmlspecialchars disparaîssent facilement]

 

Pareil avec des fonctions qui génère les tags, bah faut apprendre l'API [:sadnoir] Et toutes les API de générations de tags suxent à mort. Là au moins tu torches ton formulaire vite-fait, et... et... y'a plus rien à faire !

 

J'ai aussi un modèle qui prend en paramètre la template du form pour générer des règles de validations. On peut un peut customiser avec des classes pour signaler des champs requis ou d'un certain type (genre class="email required" ). Bon c'est surtout pour des formulaires très simples, genre formulaire de contact.

 

J'ai 2-3 personnes qui ont utilisé ce système, et qui ont été bien contentes de n'avoir à faire que le formulaire et mettre quelques classes.

 

Ça ne dispense pas toutefois d'avoir la possibilité de faire quelque chose de plus complexe à côté. On doit pouvoir faire ses propres règles de validation (pour les validations nécessitant par exemple un appel à la base), mais aussi pouvoir faire des formulaire plus customs. Ce que permet le MVC, pouvoir switcher les composants sans changer le contrôleur par exemple.

Message cité 1 fois
Message édité par FlorentG le 18-11-2009 à 22:34:52
Reply

Marsh Posté le 18-11-2009 à 22:50:53    

j'ai fais pareil aussi pour le coup des class (email required), et de plus DomDocument échappe les carateres

 

j'ai un autre paramete aussi c'est l'extention des names, vu que je bosse avec doctrine (ouai celui j'ai le droit...ouf)

 

par exemple pour les emplois d'un utilisateur
j'aurai

 
Code :
  1.    login => login
  2.    password =>password
  3.    userEmplois => array(){
  4.        [0] = array(){
  5.            date => blavla
  6.            title => blabla
  7.          }
  8.       [1] = array(){
  9.            date => blavla
  10.            title => blabla
  11.         }
  12.    }
  13. }
 

ducoup je fait

 
Code :
  1. foreach($user->userEmplois as $key => $emplois)
  2. {
  3.   $form = new Form("userEmplois[$key]" );
  4.   $form->load('formemplois.php')
  5.   $form->populate($emplois);
  6. }
 

ce qui donnera

 

<input type="text" name="userEmplois[0]['date']" value="blabla" />

 

ducoup en POST si je valide mon premier emploi j'ai

 
Code :
  1. array(){
  2.      userEmplois => array(){
  3.            [0] = array(){
  4.                 date => blavlachanger
  5.                 title => blablachanger
  6.         }
  7. }
 

un petit coup de  merge avec doctrine   et vendu

 


Message édité par stealth35 le 18-11-2009 à 22:55:41
Reply

Marsh Posté le 19-11-2009 à 10:08:10    

FlorentG a écrit :

hors de question de se taper des trucs styles :

Code :
  1. <input type="text" id="machin" name="machin" value="<?php echo htmlspecialchars($value, 'utf-8', ENT_QUOTES) ?>" />


[surtout qu'avec les intégrateurs, les htmlspecialchars disparaîssent facilement]


Ouais m'enfin si t'en es à mettre les htmlspecialchars dans le template au lieu de demander à un objet de la couche vue de te fournir une représentation utilisable dans une page web de ta variable t'as déjà tout faux depuis un moment, hein.[:sadnoir]

Message cité 1 fois
Message édité par skeye le 19-11-2009 à 10:08:44

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed