美文网首页
ThinkPHP5配置

ThinkPHP5配置

作者: gg大宇 | 来源:发表于2018-03-24 15:29 被阅读34次
    惯例配置
    image.png
    image.png

    这些返回的是 在thinkphp目录下的convention.php中
    它只返回了一个数组。
    此时我们添加一个


    image.png
    image.png

    说明我们此时的配置是生效的。

    扩展配置

    我们仅通过应用配置就能完成我们的开发工作
    为什么要学习扩展配置呢?

    在我们的实际开发中 配置项会有很多,比如我们的缓存配置 cookie配置,如果将这些配置全部集合在一个文件中,那么这个文件将会非常大,而且不容易维护,所以我们可以将这个文件拆分成多个文件,所以我们就需要学习扩展配置

    需求
    在conf下创建目录叫extra(确定只能叫这个名字才能生效)
    扩展配置的优先级高于应用配置。也就是说在应用配置中配置的东西,如果扩展配置中也配置了,那么优先用的是扩展配置的。

    场景配置

    在不同的环境中使用不同的配置文件。

    在conf文件夹下的config.php中先加上

    'app_status' =>'home'
    /*比如是在家里
    
      然后在去conf下面创建一个home.php
    然后直接在里面返回一个数组
    */
    <?php
    return [
      'app_address' =>'home'
    ];
    /*
    此时在输入localhost/index/index/index 会发现 在最下面会多出
    'app_address' =>'home'
    */
    
    /*
    在比如 你想在你的办公室时候的数据库密码设置为123456
    先去conf下的config.php中
    'app_status' =>'office’'
    然后在去创建一个office.php
    */
    return[
    'add_address'=>'office',
    'database' =>[
        'password' => '123456'
    ]
    ];
    
    /*
    如果我们家里的数据库密码不是123456 那么我们可以回到home.php中加上下面代码
    */
    'database' =>[
        'password' => 'root'
    ]
    

    注意 如果我们要配置数据库 那么我们需要配置数据库的所有项。

    而如果我们想使用上面那种方法的话,我们需要把database.php中的所有内容都拷过来,否则我们之前的配置会失效。

    当我们需要从办公环境回到家环境的时候,去config.php中,把'app_status' =>'home'这样改一下就行。

    模块配置

    之前所有的应用配置,都是所有模块都同时更改,无法做到每个模块使用独立的配置。

    我们需要在conf目录下 新建 index目录(必须与我们的模块名一致),再在index目录下新建config.php(这个名字是确定的,它里面使用的配置或者说设置的配置只对index模块下的所有程序有效)

    这个目录index下面的东西可以和conf下的目录结构一样,只是作用域不同而已,conf下面的作用域是整个应用,而index下的只是作用于index模块

    动态配置

    主要用于我们对当前控制器和方法里面进行动态的配置改变或者动态的配置设置。

    我们在index目录下的controller下的Index.php(index方法)

    <?php
    namespace app\index\controller;
    
    class Index
    {
       public function __construct()
        {
          config('before','beforeAction');
        }      
    
      public function index(){
        dump(config());
    }
    }
    
    cofig类和config助手函数

    config类位于 thinkphp下的library下的think下的Config.php

    可以看到里面有个ranage方法 用来设置配置参数的作用域


    image.png

    有个parse方法 用来解析配置文件或内容


    image.png
    有个load方法 用来加载配置文件
    image.png

    等等

    我们回到Index.php

    image.png

    我们刷新浏览器

    image.png

    会报错
    说明当前我们这个类不存在

    如果我们想在这使用Config类有两种方法来解决

    1、直接将它卸载根目录的think下


    image.png

    2、直接用use


    image.png
    这时候我们就可以看到各种配置项了
    image.png

    Config::get对应的助手函数 就是config() 不加任何参数


    image.png
    效果完全一样的
    image.png
    说明这两个函数目前的作用是一致的。
    • config()助手函数是如何实现的呢
      thinkphp目录下有个helper.php(thinkphp中的默认助手函数都在这)


      image.png

      这个函数接收三个参数,第一个是name,是参数名 第二个是value,参数值,第三个range是作用域
      如果我们的值是null 并且我们的name是一个字符串,这个时候它优先判断我们的字符串中有没有问号,如果有问号并且这个问号在第一位的话,它优先调用Config下的has,如果没有问号,直接调用的是Config下的get,否则我们直接调用的就是Config下的set
      它在最上面也直接是 use think\Config
      说明我们使用助手函数,其实最终的实现也是Config类来实现

    • 如何获取配置中的某一个值


      image.png
      image.png

      而它所对应的助手函数是$res = config('app_namespace');

    • 如何去设置参数呢

    $res = Config::set('username','along');
    dump(Config::get('username'));
    如果我们没有设置成功,那么我们就会得到的是null,而如果成功了,那么就是along
    而如果我们要用助手函数的话
    config('username','along');
    这样写就行了。

    接下来我们看下它们的作用域

    Config::set('username','along','index');
    dump(Config::get('username'));
    
    image.png

    这时候我们得到的是个null值,虽然我们设置了username的值是along,也得到的是username的值,但是它们两个没有在同一个作用域下。如果我们想得到index作用域下的username那么我们需要给get传第二个参数
    dump(Config::get('username','index'));


    image.png

    助手函数 同理

    • has函数
      是检查配置中是否有这个配置
    $res = Config::has('username');
    dump($res);
    
    image.png

    返回的是个false
    我们可以直接Config::set('username','123');
    助手函数用的时候

    $res = config('?username');

    相关文章

      网友评论

          本文标题:ThinkPHP5配置

          本文链接:https://www.haomeiwen.com/subject/iwveqftx.html