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的解决办法的主要内容,如果未能解决你的问题,请参考以下文章
使用custombox 和 validate 对动态加载的表达无法验证的解决办法