ThinkPHP6无法动态include的解决办法

Posted Rudon滨海渔村

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP6无法动态include的解决办法相关的知识,希望对你有一定的参考价值。

目标

不改TP框架源代码!不改TP框架源代码!不改TP框架源代码!

页面A  --   http://tp6.com/home/index/index
页面B  --   http://tp6.com/home/index/bbb - 另外自行加载bbb.css(在common/htmlHead.html
页面C  --   http://tp6.com/home/index/ccc - 另外自行加载ccc.css (在common/htmlHead.html
三个页面,都是会:

{include file='common/htmlHead.html'}
各自的内容
{include file='common/htmlFoot.html'}

怎么办呢?

最简单的办法是,每个方法里面各自定义html代码

View::assign('moreCss', '<link href="xx.css" rel="stylesheet" />');
或者空字符串;

再在common/htmlHead.html直接输出变量值,{$moreCss},ok!

关键是,不是动态include!不过瘾!下面是动态include方法

TP6动态include文件

【控制器】

<?php
declare (strict_types = 1);
namespace app\\home\\controller;

use think\\facade\\View;

class Index
{
    
    public function index()
    {
        $this->setMoreCss('common/moreCss/empty');
        return View::fetch('index');
    }

    public function bbb () {
        $this->setMoreCss('common/moreCss/bbb');
        return View::fetch('bbb');
    }

    public function ccc () {
        $this->setMoreCss('common/moreCss/ccc');
        return View::fetch('ccc');
    }

    public function setMoreCss ($path) {
        View::assign('moreCss', $path);
    }

}

【模板分布】

/ app / home / view / common / htmlHead.html
/ app / home / view / common / htmlFoot.html
/ app / home / view / common / moreCss / empty.html (空文件)
/ app / home / view / common / moreCss / bbb.html (内有bbb页面专用的css文件link标签)
/ app / home / view / common / moreCss / ccc.html (内有ccc页面专用的css文件link标签)
/ app / home / view / index / index.html  (include了htmlHead + 自身内容 + htmlFoot)
/ app / home / view / index / bbb.html     (include了htmlHead + 自身内容 + htmlFoot)
/ app / home / view / index / ccc.html     (include了htmlHead + 自身内容 + htmlFoot)

【代码】

common / htmlHead.html

<html>
    <head>
        <meta charset="utf-8" />
        <title>...</title>
        {include file="$moreCss"}
    </head>
    <body>

common / moreCss / bbb.html

<link href="styleB.css" rel="stylesheet" />
<link href="fontFamily.css" rel="stylesheet" />

重点是:{include file="$moreCss"} 变量可控模板路径。

写在后面

以前试过在view里面根据“变量$moreCss有定义的话,就include”,结果不行,代码如下:

    {present name="moreCSS"}    --- 判断是否变量已定义
    {notempty name="moreCSS"}     --- 判断变量是否为空
       {include file="$moreCss"}   ---- 这个include直接不受present和notempty控制!!!
    {/notempty}
    {/present}

结果报错,include路径不能为空(因为index方法里面没有assign,也不想另外弄个空的html视图),所以还是用TP6动态include文件的方法吧。

 

以上是关于ThinkPHP6无法动态include的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp6----延迟生效解决办法亲测有效

thinkphp6 分页 url额外参数无效的解决办法

ios 下fixed遮罩背景无法动态监听,解决办法

使用custombox 和 validate 对动态加载的表达无法验证的解决办法

Mongo.exe 无法定位程序输入点terminate于动态链接库 *.dll的解决办法

react img 被自动转成base64,无法根据当前路径来动态改变值的解决办法