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

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

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

n°1905967
Alekusu2
Posté le 16-07-2009 à 21:45:24  profilanswer
 

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.

mood
Publicité
Posté le 16-07-2009 à 21:45:24  profilanswer
 

n°1905974
PierreC
Posté le 16-07-2009 à 22:19:04  profilanswer
 

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


---------------
Du tofu en Alsace : www.tofuhong.com
n°1905979
esox_ch
Posté le 16-07-2009 à 22:27:34  profilanswer
 

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
n°1905982
Alekusu2
Posté le 16-07-2009 à 22:33:12  profilanswer
 

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
n°1905989
esox_ch
Posté le 16-07-2009 à 22:55:00  profilanswer
 

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
n°1905999
Alekusu2
Posté le 16-07-2009 à 23:40:13  profilanswer
 

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.

n°1906009
Pascal le ​nain
Posté le 17-07-2009 à 00:37:03  profilanswer
 

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
n°1906012
Alekusu2
Posté le 17-07-2009 à 01:39:51  profilanswer
 

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
n°1906060
esox_ch
Posté le 17-07-2009 à 10:17:27  profilanswer
 

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
n°1941911
tafary94
Posté le 18-11-2009 à 14:41:28  profilanswer
 

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

mood
Publicité
Posté le 18-11-2009 à 14:41:28  profilanswer
 

n°1941960
stealth35
Posté le 18-11-2009 à 15:31:57  profilanswer
 

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
n°1941992
skeye
Posté le 18-11-2009 à 15:55:56  profilanswer
 

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 -
n°1941998
fred777888​999
Posté le 18-11-2009 à 16:03:20  profilanswer
 

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

n°1942004
stealth35
Posté le 18-11-2009 à 16:10:37  profilanswer
 

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
n°1942012
skeye
Posté le 18-11-2009 à 16:16:18  profilanswer
 

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 -
n°1942019
stealth35
Posté le 18-11-2009 à 16:21:57  profilanswer
 

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

n°1942030
skeye
Posté le 18-11-2009 à 16:32:29  profilanswer
 

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 -
n°1942039
stealth35
Posté le 18-11-2009 à 16:41:17  profilanswer
 

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
n°1942045
skeye
Posté le 18-11-2009 à 16:52:40  profilanswer
 

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 -
n°1942047
stealth35
Posté le 18-11-2009 à 16:57:14  profilanswer
 

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'


n°1942048
skeye
Posté le 18-11-2009 à 17:01:11  profilanswer
 

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 -
n°1942051
stealth35
Posté le 18-11-2009 à 17:11:37  profilanswer
 

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
n°1942063
skeye
Posté le 18-11-2009 à 17:50:58  profilanswer
 

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 -
n°1942081
stealth35
Posté le 18-11-2009 à 19:29:18  profilanswer
 

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
         

n°1942083
skeye
Posté le 18-11-2009 à 19:34:51  profilanswer
 

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 -
n°1942090
flo850
moi je
Posté le 18-11-2009 à 20:01:24  profilanswer
 

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


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

n°1942093
stealth35
Posté le 18-11-2009 à 20:15:18  profilanswer
 

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:

n°1942094
stealth35
Posté le 18-11-2009 à 20:16:08  profilanswer
 

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 ?

n°1942100
skeye
Posté le 18-11-2009 à 20:39:18  profilanswer
 

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 -
n°1942101
skeye
Posté le 18-11-2009 à 20:41:30  profilanswer
 

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 -
n°1942103
stealth35
Posté le 18-11-2009 à 20:50:36  profilanswer
 

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)

n°1942105
stealth35
Posté le 18-11-2009 à 20:52:58  profilanswer
 

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.

n°1942108
flo850
moi je
Posté le 18-11-2009 à 20:54:23  profilanswer
 

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.


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

n°1942113
stealth35
Posté le 18-11-2009 à 20:58:34  profilanswer
 

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

n°1942124
skeye
Posté le 18-11-2009 à 21:30:53  profilanswer
 

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 -
n°1942131
FlorentG
Unité de Masse
Posté le 18-11-2009 à 21:44:48  profilanswer
 

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
n°1942141
stealth35
Posté le 18-11-2009 à 22:10:56  profilanswer
 

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
n°1942149
FlorentG
Unité de Masse
Posté le 18-11-2009 à 22:33:30  profilanswer
 

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
n°1942150
stealth35
Posté le 18-11-2009 à 22:50:53  profilanswer
 

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
n°1942211
skeye
Posté le 19-11-2009 à 10:08:10  profilanswer
 

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 -
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
Variable de Session avec Input[PHP/XML] Problème pour trouver le code PHP à partir du code VBS
[AS2] Recuperer le lien d'une page contenant le swfgénérateur de Formulaire PHP ; partie intrigante, demande infos
[RESOLU]TRés URGENT chekbox et passage de variableProblème avec variable php
aide jquery thickbox passage de variablePHP/MySQL INSERT INTO en masse qui déraille (oubli de données)
[Résolu][ASP.NET][C#] Heritage et partage de variablePL/SQL : utilisation de variable pour liste de valeur dans requête
Plus de sujets relatifs à : [PHP] Comment définir une variable contenant une include ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR