2009-06-08 4 views
0

i avoir deux fichiers PHP:Charger du code PHP en PHP pour une exécution différée + paramétrée?

  • template.php
  • template.html.php

La première est la définition de classe pour modèle. La seconde contient un modèle basé sur HTML, mais avec des constructions PHP (d'où l'extension .PHP). Je dirais que c'est un fichier html/php hybride.

Est-il possible de créer une fonction dans le modèle de classe (special_include_parse()) qui prend:

  • $ path (dans un fichier html/php hybride)
  • modèle $ (qui est passé au code dans le fichier html/php hybride de sorte qu'il peut être référencé en utilisant $ this-> getModel() ou $ model ou quoi que ce soit ...)

?


template.php

class Template { 
    function Parse($model) { 
     //include('/var/www/template.html.php'); 
     //fopen('/var/www/template.html.php'); 
     $return = special_include_parse('/var/www/template.html.php', $model); 
    } 
} 

template.html.php

<html> 
    <head> 
     <title><? echo $this->getModel()->getTitle(); ?></title> 
    </head> 
</html> 
+0

On dirait que vous réinventez pratiquement le système de templates de Fry: http://fry.sourceforge.net/ –

Répondre

2

Um ... pourquoi ne pas simplement mis cela (bien que je ne serais pas $ appelez ça) et incluez/require le template.html.php en considérant que c'est fondamentalement la syntaxe PHP? En gros:

class Template { 
    function Parse($model) { 
    ob_start(); 
    require '/var/www/template.html.php'; // I wouldn't use absolute paths 
    $return = ob_get_clean(); 
    } 
} 

Personnellement si je pense que cela est un excellent exemple de faire quelque chose de plus difficile que ce soit par l'introduction d'une abstraction d'objets inutiles (en fait, contre-productif) à quelque chose qui est par ailleurs assez simple:

$model = new MyModel(...); 
require 'template.html.php'; 

et

<html>... 
    <h3><?= $model->getStuff(); ?></h3> 

Je ne sais pas pourquoi vous êtes ou plutôt trop compliquer ce que vous essayez d'atteindre.

+0

J'ai des classes View (.php) qui peuvent avoir un fichier template lié (.html.php). À la fin d'un script, getHtml() est appelé dans la classe View. À ce stade, un modèle doit avoir été défini sur la classe View. La classe Viewclass doit en quelque sorte passer ce modèle à son modèle, ce qui permet de l'analyser avec les valeurs du modèle. Je pense que le buffer de sortie est en fait ce que je cherche. Pensez-vous qu'il existe un autre moyen plus efficace de réaliser ce que je veux? – Ropstah

+0

Comment vos opinions sont-elles appelées ou référencées? – cletus

+0

Très belle réponse. Problème résolu complètement :) – Ropstah