当时我是看的3.1的教程,按照教程所教方法加载外部标签库的时候出现了错误,错误提示是:
实例化一个不存在的类!:Think\Template\TagLib\Hd
完全按照教程里面的来的,可是出现了这样的错误,感觉是版本的问题,于是网上到处找解决办法,有这两个说法:
①没有在配置文件中加入这句:'APP_AUTOLOAD_PATH' => '@.TagLib'
当时我是有写这个配置项的,还是不行,后来又看到说3.2废弃了这个配置项,实在乱的很,于是自己去ThinkPHP\Conf\Convention.php中查看了一下,是有这个配置项的,但是官方是这么说的:
'APP_AUTOLOAD_PATH' => '', // 自动加载的路径 关闭APP_USE_NAMESPACE后有效
v3.2.2引入了namespace,APP_USE_NAMESPACE默认是开启状态,所以基本排除这个原因。
②把自定义的标签库放到ThinkPHP\Library\Think\Template\TagLib文件夹
这个毫无疑问是可行的,但是把自定义标签库放到ThinkPHP框架内,我是感觉不靠谱的,个人原则是不动ThinkPHP框架,因为涉及到以后的升级问题,修改ThinkPHP框架不是个明智的做法。
查了好久,没有找到合适的,最后回头还是自己研究,首先看错误提示,实例化一个不存在的类!:Think\Template\TagLib\Hd,自己写的那个类是在Index\TagLib目录中的,可是他却去Think\Template\TagLib目录下寻找,看来是没有找到类的位置,于是在配置文件中做了修改:
'Cx,Hd',
'TAGLIB_PRE_LOAD' => 'Hd',
);
修改成了现在这样:
'Cx,Index\TagLib\Hd',
'TAGLIB_PRE_LOAD' => 'Index\TagLib\Hd',
);
修改之后还是提示错误:
实例化一个不存在的类!:Index\TagLib\Hd
现在看来路径是对了,但是还是提示不存在,于是看了一下内置标签库,他们的写法是Cx.class.php、Html.class.php,而按照教程来写的是TagLibHd.class.php,于是按照系统的写法改成Hd.class.php,模板恢复正常。
测试一下,在Hd.class.php中写一个测试标签:
array('attr'=>'','close'=>0),
);
public function _nav($tag){
$test = 'test';
return $test;
}
}
然后在模板中加上nav标签
刷新页面,正确解析。