Cet article décrit la solution au modèle ThinkPHP sans l'analyser directement en fonction. Partagez-le pour votre référence. Les détails sont les suivants:
1. Question:
J'ai appris le modèle ThinkPHP récemment, mais j'ai trouvé que la page du modèle était telle qu'elle était. Après une recherche difficile, j'ai finalement trouvé la solution.
2. Solution:
Beaucoup de gens ont rencontré le même problème. Les caractères de __root__, __public__ et __app__ contenus dans la chaîne attribuée dans la variable sont remplacés par le chemin réel lorsqu'ils sont affichés dans le modèle. Autrement dit, ce problème a été découvert lors de la rédaction du système de gestion des fichiers TIMI.
Lisez le code source du fichier et sortiz-le sur la page et trouvez que tant que le caractère de chemin est TP, il est remplacé par le chemin réel.
Par exemple:
La copie de code est la suivante: $ this-> attribution ('fileContent', $ fileContent); // $ fileContent contient le caractère __Public__ "Path constant".
La page est sortie comme le chemin réel / public /.
Au cours de cette période, j'ai essayé beaucoup de choses, comme le cryptage Base64 lors de l'attribution, et je l'ai décodé lors de la sortie du modèle, mais 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 constaté qu'à la dernière étape de la méthode d'affichage, j'ai remplacé la "constante de chemin TP" par le chemin réel en appelant la méthode de balise. C'est normal avant la méthode de rendu.
Je prévoyais à l'origine de modifier le code source pour réaliser les exigences des chaussures des enfants suivantes:
Boss, est-ce une solution temporaire ou une solution finale?
Mais je pense qu'il est bon d'ajouter un jugement à la méthode Assign ().
S'il s'agit de $ this-> attribution ('', '', false), le contenu ne sera pas remplacé et la sortie sera tel quel.
En conséquence, après avoir lu ce code source, j'ai constaté que ce n'était pas si simple et que les changements étaient trop importants.
La dernière réponse des chaussures d'un autre enfant a souligné la solution finale:
"Vous pouvez vous référer au contenu ici: //www.vevb.com/article/54217.htm (remplacement du modèle)
Avec la règle de remplacement du modèle, toutes les chaînes __public__ sur la page seront remplacées. Si vous avez vraiment besoin de sortir des chaînes __public__ sur le modèle, nous pouvons ajouter la règle de remplacement, par exemple:
Copiez le code comme suit: 'tmpl_parse_string' => array (
'---Public--' => '__public__', // Utilisez de nouvelles règles pour produire / chaîne publique
)
Après avoir ajouté la règle de remplacement de cette manière, si nous voulons sortir la chaîne __public__, nous avons seulement besoin d'ajouter - en public - au modèle, et la méthode de sortie des autres chaînes de remplacement est similaire.
Après avoir ajouté la règle de remplacement de cette manière, si nous voulons sortir la chaîne __public__, nous avons seulement besoin d'ajouter - en public - au modèle, et la méthode de sortie des autres chaînes de remplacement est similaire.
Donc, le plan a été publié:
Configurer dans le fichier de configuration de TP config.php
Copiez le code comme suit: 'tmpl_parse_string' => array (// configuration de chemin
// Restaurez le chemin du fichier TIMI
'--publique--' => '__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 de chemin" __root__ comme --root--:
La copie de code est la suivante: $ fileContent = file_get_contents ($ filepath);
$ fileContent = htmlSpecialChars (preg_replace ('/__(.*?)__/ est', '- 1 $ -', $ fileContent));
Ensuite, la configuration TMPL_PARSE_STRING est remplacée lorsque le modèle est analysé, comme indiqué dans la figure ci-dessous:
Par conséquent, ce problème a été résolu "temporairement" et "parfaitement".
J'espère que cet article sera utile à la programmation du framework ThinkPHP de tous.