ThinkPHP加载自定义的外部文件和配置文件

我们知道ThinkPHP有公共的函数文件和配置文件,位于Common目录下,默认Common/function.php为公共的函数文
件,Conf/config.php为公共配置文件。好了,那么如何自定义其他的公共函数和配置文件呢。这里不得不讲到两个配置参数
LOAD_EXT_FILE和LOAD_EXT_CONFIG了。

1.
LOAD_EXT_FILE配置的是自定义的函数文件,比如我想在Common目录下再创建一个common.php文件,那么在config.php里
则可以配置LOAD_EXT_FILE=>‘common‘,这样common.php文件就会自动载入了。

Common/Conf/config.php
return array(          LOAD_EXT_FILE=>‘common‘);

然后在common.php里写一个方法,比如:

function T_dump($data){ 
    if (!empty($data)){ 
        echo ‘<pre>‘; 
        var_dump($data); 
        echo ‘</pre>‘; 
   }}

在控制器里调用T_dump(array(1,2,3));输出:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
如果在Common下另建了另一个文件,test.php,在test.php文件里定义一个test函数
function(){echo ‘test‘;}
那么控制器里直接调用就会报错:Call to undefined function Home\Controller\test()
如果在config.php里加上test,‘LOAD_EXT_FILE’=>‘common,test‘,则正常执行。

2.LOAD_EXT_CONFIG用于自定义配置文件,比如除了config.php你想引入一个额外的配置文件global.php
那么可以在config.php里配置:
LOAD_EXT_CONFIG=>‘global‘

那么你在Conf目录下创建一个global.php文件,写一个配置参数
return array(‘MONGO_DBNAME‘=>‘idacker‘);
然后C调用echo C(‘MONGO_DBNAME‘)
输出:idacker
3.加载原理,其实自定义函数和配置文件的加载归功于load_ext_file函数,
/**
 * 加载动态扩展文件
 * @var string $path 文件路径
 * @return void
 */
function load_ext_file($path) {
    // 加载自定义外部文件
    if($files = C(‘LOAD_EXT_FILE‘)) {
        $files      =  explode(‘,‘,$files);
        foreach ($files as $file){
            $file   = $path.‘Common/‘.$file.‘.php‘;
            if(is_file($file)) include $file;
        }
    }
    // 加载自定义的动态配置文件
    if($configs = C(‘LOAD_EXT_CONFIG‘)) {
        if(is_string($configs)) $configs =  explode(‘,‘,$configs);
        foreach ($configs as $key=>$config){
            $file   = is_file($config)? $config : $path.‘Conf/‘.$config.CONF_EXT;
            if(is_file($file)) {
                is_numeric($key)?C(load_config($file)):C($key,load_config($file));
            }
        }
    }
}
函数需要传入一个$path目录路径,比如我们传入COMMON_PATH,
那么上面两步创建的common.php函数和global.php配置文件将被加载。
时间: 2024-10-20 20:54:47

ThinkPHP加载自定义的外部文件和配置文件的相关文章

rails 中加载自定义文件

rails默认生成lib文件夹,但是没有默认加载lib中的文件,可以在config/application.rb中配置如下代码,加载lib文件夹里面定义的module或者是class: config.autoload_paths += %W(#{config.root}/lib) 当然这种方法不只是可以加载lib文件,还可以加载其他自定义的文件夹. 注意的是这些自定义的文件的module或者class名一定要和文件名一直,比如class名为AppStore,那文件名一定要是app_store.r

Android中layout.xml文件中加载自定义的View类

<com.bn.summer.GGView3 android:layout_width="100dip" android:layout_height="114dip" android:layout_marginLeft="11dip" /> View类的实现: package com.bn.summer; import android.content.Context; import android.content.res.Resour

在Thinkphp中【自动加载自定义扩展配置文件】!

/Conf/config.php为正式的扩展文件 /Conf/verify.php为扩展的自定义配置文件 /Conf/sendmail.php为扩展的自定义配置文件 如果要自动加载 verify和sendmail的扩展配置文件,方法如下: 在Config.php里新增一个: 'LOAD_EXT_CONFIG' => 'verify,sendmail' 就可以了. verify.php内容: <?php return array( 'size' => 4, 'title' => '测

JQuery 加载 CSS、JS 文件的方法有哪些?

在进行web前端开发(http://www.maiziedu.com/course/web-px/)时,我们可能会需要使用JQuery加载一个外部的css文件或者js文件,加载外部文件的方法有多种,下面具体看看各种加载方法 JS 方式加载 CSS.JS 文件: //加载 css 文件function includeCss(filename) { var head = document.getElementsByTagName('head')[0]; var link = document.cre

[Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]

Yii 2.0最显著的特征之一就是引入了命名空间,因此对于自定义类的引入方式也同之前有所不同.这篇文章讨论一下如何利用Yii 2.0的自动加载机制,向系统中引入自定义类和命名空间.本文旨在抛砖引玉,如果有理解不当敬请指正,欢迎大家把自己的方法拿出来分享.我们希望被引入的类应该达成一下两点: 在应用中的任这里输入代码意位置可以使用该类名或命名空间,而不用显式调用require()/include(). 利用Yii的autoloader,仅在类被调用时加载,以遵循Yii按需加载的原则,节省资源. 我

基于.net 的加载自定义配置-误操作

有时候 需要 将程序加载自定义的配置文件,除了自己写解析xml文件.内置的ConfigutionManager对象 是个不错的选项. 按照 app.config 的方式,做一个副本.然后从你的配置文件中,加载指定的配置 键值对! //方法1-可以读取任意位置的xml文件 ExeConfigurationFileMap filemap = new ExeConfigurationFileMap(); filemap.ExeConfigFilename = QuartzConfigPath; //f

一个link加载多个css文件

细看正则时匹配慕课网链接时发现的,一个link加载多个css文件 http://static.mukewang.com/static/css/??base.css,common/common-less.css?t=2.5,u/u_common-less.css,u/plans-less.css,u/dynamic/home-less.css?v=201708111926 淘宝也有这样的链接 http://a.tbcdn.cn/p/fp/2011a/??html5-reset-min.css,gl

java如何加载本地的dll文件

首先,应当明确,dll有两类:(1)Java所依赖的dll和,(2)dll所依赖的dll.正是由于第(2)种dll的存在,才导致了java中加载dll的复杂性大大增加,许多说法都是这样的,但我实验的结果却表明似乎没有那么复杂,后面会予以详细阐述. 其次,Java中加载dll的方式也有两种:(1)通过调用System.loadLibrary(String filename)和,(2)通过调用System.load(String filename)方法.其底层都是通过使用ClassLoader中的l

js便签笔记(8)——js加载XML字符串或文件

1. 加载XML文件 方法1:ajax方式.代码如下: var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open("GET", "data.xml", false); xhr.send(null); var xmlDoc = xhr.responseXML; console.log(xmlDoc