Maison  >  Article  >  interface Web  >  Solution au problème selon lequel le modèle Thinkphp n'analyse pas et ne sort pas directement car il s'agit de compétences_javascript

Solution au problème selon lequel le modèle Thinkphp n'analyse pas et ne sort pas directement car il s'agit de compétences_javascript

WBOY
WBOYoriginal
2016-05-16 16:32:323406parcourir

L'exemple de cet article décrit la solution au problème selon lequel le modèle Thinkphp n'est pas analysé et le génère directement tel quel. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

1. Question :

J'ai récemment appris les modèles thinkphp, mais j'ai découvert que la page du modèle était telle quelle. Après de longues recherches, j'ai finalement trouvé la solution.

2.Solution :

De nombreuses personnes ont rencontré le même problème. Les __ROOT__, __PUBLIC__ et __APP__ contenus dans la chaîne attribuée à la variable sont remplacés par des chemins réels lorsqu'ils sont affichés dans le modèle. J'ai découvert ce problème lors de l'écriture du système de gestion de fichiers Timi.

Après avoir lu le code source du fichier et l'avoir affiché sur la page, j'ai découvert que tant qu'il s'agit d'un caractère de chemin TP, il a été remplacé par un chemin réel.
Par exemple :

Copier le code Le code est le suivant :
$this->assign('fileContent',$ fileContent); //$fileContent contient des caractères __PUBLIC__ "constante de chemin".


Une fois la page sortie, elle est affichée comme le chemin réel /public/.
Au cours de cette période, j'ai effectué de nombreuses tentatives, telles que le cryptage base64 lors de l'attribution, le décodage lors de la sortie du modèle, et j'ai constaté que cela ne fonctionnait pas. Enfin, je n'ai pas pu m'empêcher de regarder le code source de Tp et j'ai découvert que dans la dernière étape de la méthode d'affichage, la "constante du chemin Tp" était remplacée par le chemin réel en appelant la méthode tag. Tout est normal avant la méthode de rendu.

J'avais initialement prévu de modifier le code source pour implémenter la solution suivante pour les chaussures pour enfants :
Patron, est-ce une solution temporaire ou une solution définitive ?
Mais je pense que ce n'est pas mal d'ajouter un jugement dans la méthode assign(),
Si c'est $this->assign('','',false), le contenu ne sera pas remplacé et sera affiché tel quel.

Du coup, après avoir lu ce code source, j'ai réalisé que ce n'était pas si simple et que les changements étaient trop gros.

La dernière réponse d'un autre enfant a souligné la solution finale :

"Vous pouvez vous référer au contenu ici : http://www.jb51.net/article/54217.htm(remplacement du modèle)

Avec la règle de remplacement du modèle, toutes les chaînes __PUBLIC__ de la page seront remplacées. Si nous avons vraiment besoin d'afficher la chaîne __PUBLIC__ dans le modèle, nous pouvons ajouter des règles de remplacement, par exemple :
.

Copier le code Le code est le suivant :
'TMPL_PARSE_STRING' =>array(
'--PUBLIC--' => '__PUBLIC__', // Utiliser de nouvelles règles pour afficher /Chaîne publique
)

Après avoir ajouté la règle de remplacement de cette manière, si nous voulons afficher la chaîne __PUBLIC__, il nous suffit d'ajouter --PUBLIC-- dans le modèle. La méthode de sortie des autres chaînes de remplacement est similaire.

Après avoir ajouté les règles de remplacement de cette manière, si nous voulons afficher la chaîne __PUBLIC__, il nous suffit d'ajouter --PUBLIC-- dans le modèle. La méthode de sortie des autres chaînes de remplacement est similaire.

Donc, le plan a été dévoilé :

Configurer dans le fichier de configuration de Tp config.php

Copier le code Le code est le suivant :
'TMPL_PARSE_STRING' => tableau (//configuration du chemin
                           
//Restauration du chemin du fichier Timi
'--PUBLIC--' => '__PUBLIC__',
'--APP--' => '__APP__',
'--URL--' => '__URL__',
'--ACTION--' => '__ACTION__',
'--SELF--' => '__SELF__',
'--INFO--' => '__INFO__',
'--EXT--' => '__EXT__'
),

Lors de la lecture du code source, remplacez le "caractère constant du chemin" __ROOT__ par --ROOT-- :

Copier le code Le code est le suivant :
$fileContent=file_get_contents($filePath); $fileContent=htmlspecialchars(preg_replace('/__(.*?)__/is','--$1--',$fileContent));

Ensuite, la configuration de TMPL_PARSE_STRING est simplement remplacée lorsque le modèle est analysé, comme le montre la figure ci-dessous :

Depuis, ce problème a été « temporairement » et « parfaitement » résolu.

J'espère que cet article sera utile à la programmation du framework ThinkPHP de chacun.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn