Bonjour à tous, Je vous expose un probleme
J'ai une classe view dans mon mvc qui genere ma vue, dans cette classe je souhaiterais y integrer un minifier
Mais quoi que je fasse la methode pour minifier ne marche pas
Quand j'affiche le code source, aucune modification n'est prise en compte, les commentaires sont toujours presents et les multiples retour a la ligne sont toujours la, et surtout le poids de la page est le même
// Génère et affiche la vue
public function generer($donnees, $gabarit = 'default') {
// Génération de la partie spécifique de la vue
$contenu = $this->genererFichier($this->fichier, $donnees);
// Génération du gabarit commun utilisant la partie spécifique
$vue = $this->genererFichier('app/ressources/views/' . $gabarit . '.php', array(
'titre' => $this->titre,
'meta' => $this->meta,
'contenu' => $contenu,
'racineWeb' => WEBROOT
));
// Renvoi de la vue générée au navigateur
echo $vue;
}
// Génèration du fichier vue
private function genererFichier($fichier, $donnees) {
if (file_exists($fichier)) {
extract($donnees);
ob_start(array($this,'minifyHtml'));
require_once $fichier;
return ob_get_clean();
} else {
throw new Exception("Fichier '$fichier' introuvable");
}
}
//minifier html
private function minifyHtml($buffer){
return preg_replace(
array('/<!--(.*)-->/Uis',"/[[:blank:]]+/"),
array('',' '),
str_replace(array("\n","\r","\t"),'',$buffer)
);
}
j'avais deja essayer ceci:
// Génère un fichier vue et renvoie le résultat produit
private function genererFichier($fichier, $donnees) {
if (file_exists($fichier)) {
extract($donnees);
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')){
ob_start("ob_gzhandler");
}else {
ob_start();
}
require_once $this->minifyHtml($fichier);
return ob_get_clean();
} else {
throw new Exception("Fichier '$fichier' introuvable");
}
}
Je comprend pas pourquoi, je n'ai aucune compression effectuée
Merci d'avance pour votre aide
D'après la doc d'ob_start, si ton callback echoue (retourne false), ce sont les données d'origine qui sont envoyées au navigateur.
ce doit être ce qui ce passe.
essaye de renvoyer juste "coucou" pour voir si ta méthode minifyHtml est appelée
Edit : essaye de mettre ta méthode en public plutot qu'en private
Pour une raison que j'ignore, ya rien a faire le callback de l'ob_start ne marche pas
j'ai neanmoins reussi en faisant comme ci dessous:
private function genererFichier($fichier, $donnees) {
if (file_exists($fichier)) {
extract($donnees);
ob_start();
require_once $fichier;
return $this->minify_html(ob_get_clean());
} else {
throw new Exception("Fichier '$fichier' introuvable");
}
}
Il est possible que l'objet que tu passes à l'ob_start (le this) soit déjà détruit lorsque le callback est appelé.
As-tu essayé avec une méthode statique ?