Este artigo descreve a solução para o modelo ThinkPhp sem analisá -lo diretamente em saída como está. Compartilhe para sua referência. Os detalhes são os seguintes:
1. Pergunta:
Recentemente, tenho aprendido o modelo ThinkPhp, mas descobri que a página do modelo era como era. Após uma pesquisa difícil, finalmente encontrei a solução.
2. Solução:
Muitas pessoas encontraram o mesmo problema. Os caracteres de __root__, __public__ e __App__ contidos na string atribuída na variável são substituídos pelo caminho real quando exibidos no modelo. Ou seja, esse problema foi descoberto ao escrever o sistema de gerenciamento de arquivos TIMI.
Leia o código -fonte do arquivo e envie -o para a página e descubra que, desde que o caractere do caminho seja TP, ele é substituído pelo caminho real.
por exemplo:
A cópia do código é a seguinte: $ this-> atribui ('FileContent', $ FileContent); // $ FileContent contém o caractere __public__ "Path Constant".
A página é produzida como o caminho real /público /.
Durante esse período, tentei muitas coisas, como a criptografia base64 ao atribuir e decodificá -la ao emitir o modelo, mas descobri que ele não funcionava. Por fim, não pude deixar de olhar para o código -fonte do TP e descobri que, na última etapa do método de exibição, substituí a "TP Path Constant" pelo caminho real chamando o método de tag. É normal antes do método de renderização.
Eu estava originalmente planejando alterar o código -fonte para realizar os seguintes requisitos de sapatos infantis:
Chefe, isso é uma solução temporária ou uma solução final?
Mas acho que é bom adicionar um julgamento ao método atribui ().
Se for $ this-> atribui ('', '', false), o conteúdo não será substituído e a saída será AS-IS.
Como resultado, depois de ler esse código -fonte, descobri que não era tão fácil e as mudanças eram muito grandes.
A última resposta dos sapatos de outra criança apontou a solução final:
"Você pode consultar o conteúdo aqui: //www.vevb.com/article/54217.htm (substituição de modelos)
Com a regra de substituição do modelo, todas as seqüências __public__ na página serão substituídas. Se você realmente precisar produzir strings __public__ para o modelo, podemos adicionar a regra de substituição, por exemplo:
Copie o código da seguinte forma: 'tmpl_parse_string' => Array (
'--Public--' => '__public__', // use novas regras para produzir string ou public string
)
Depois de adicionar a regra de substituição dessa maneira, se quisermos produzir a string __public__, precisamos adicionar-Public-ao modelo, e o método de saída de outras seqüências de substituição é semelhante.
Depois de adicionar a regra de substituição dessa maneira, se quisermos produzir a string __public__, precisamos adicionar-Public-ao modelo, e o método de saída de outras seqüências de substituição é semelhante.
Então, o plano foi lançado:
Configure no arquivo de configuração do TP Config.php
Copie o código da seguinte forma: 'tmpl_parse_string' => array (// configuração de caminho
// restaurar o caminho do arquivo timi
'--Public--' => '__public__',
'--App--' => '__App__',
'--Url--' => '__url__',
'--Action--' => '__Action__',
'--Self--' => '__self__',
'--info--' => '__info__',
'--Ext--' => '__ext__'
),
Ao ler o código-fonte, substitua o "Path Constant Character" __root__ como-root--:
A cópia do código é a seguinte: $ FileContent = FILE_GET_CONTENTS ($ FILEPATH);
$ FileContent = htmlspecialchars (preg_replace ('/__(.* ?*?__/ IS', '-$ 1-', $ FileContent));
Em seguida, a configuração TMPL_PARSE_STRING é substituída quando o modelo é analisado, como mostrado na figura abaixo:
Portanto, esse problema foi resolvido "temporariamente" e "perfeitamente".
Espero que este artigo seja útil para a programação da estrutura ThinkPhp de todos.