2011-09-11 4 views
2

Questionob_start() Alternative pour les templates en PHP?

Updated

Je construis un framework MVC, pour mes modèles et points de vue, je vais avoir un fichier de modèle de page principale et mon point de vue sera inclus dans ce modèle.

La seule façon que je l'ai vu le faire est d'utiliser la sortie buffereing

ob_start(); 
include 'userProfile.php'; 
$content = ob_get_clean(); 

est-il une autre façon de le faire? Je pense en mémoire tampon de sortie n'est pas le meilleur sur la performance car il utilise beaucoup de mémoire

Voici un contrôleur de l'échantillon, la $this->view->load('userProfile', $profileData); est la partie qui sera chargée à l'aide biffering de sortie afin qu'il puisse être inclus dans le modèle principal ci-dessous dans la partie de contenu $

vue classe

public function load($view,$data = null) { 

    if($data) { 
     $this->data = $data; 
     extract($data); 
    } elseif($this->data != null) { 
      extract($this->data); 
    } 

    ob_start(); 
    require(APP_PATH . "Views/$view.php"); 
    $content = ob_get_clean(); 
} 

contrôleur

/** 
* Example Controller 
*/ 
class User_Controller extends Core_Controller { 



    // domain.com/user/id-53463463 
    function profile($userId) 
    { 
     // load a Model 
     $this->loadModel('profile'); 
     //GET data from a Model 
     $profileData = $this->profile_model->getProfile($userId); 

     // load view file 
     $this->view->load('userProfile', $profileData); 
    } 
} 

principal modèle de site

<html> 
<head> 

</head> 

<body> 

<?php echo $content; ?> 

</body> 
</html> 
+2

Avez-vous envisagé d'en utiliser une déjà existante telle que Twig ou Smarty? – Treffynnon

+2

Comment êtes-vous arrivé à la conclusion que la mémoire tampon de sortie utilise beaucoup de mémoire? Avez-vous réellement profilé le code et découvert que c'est effectivement le cas? –

+1

Si vous souhaitez placer le modèle rendu dans une variable, il consommera toujours au moins la taille du modèle rendu. – arnaud576875

Répondre

0

L'utilisation d'un système de template est pas nécessairement lié à mémoire tampon de sortie. Il y a deux choses dans le code exemple que vous donnez cela ne devrait certainement pas être pris pour acquis:

One:

flushblocks(); // what does this do?? 

Et deux:

$s = ob_get_clean(); 

Pourquoi la capture du code du sortie de modèle dans une variable? Est-il nécessaire de faire un traitement sur ceci avant de le sortir? Sinon, vous pourriez simplement perdre les appels de mise en mémoire tampon de sortie et laisser la sortie être envoyée au navigateur immédiatement.

+0

Désolé flushblocks(); Il est resté là par hasard, cela ne devrait pas être dans l'exemple. Mon fichier de modèle principal qui aurait la mise en page (en-tête, corps, barre latérale, pied de page) est inclus dans la page. La section de corps a une variable $ content qui serait le contenu de $ s = ob_get_clean(); $ s contiendrait le contenu d'une vue particulière de mon MVC – JasonDavis

+0

J'ai mis à jour tout mon post avec de meilleurs exemples – JasonDavis