• 中文
    • English
  • 注册
  • 查看作者
  • 5:ThinkPHP的命名规范、目录介绍、主要配置

    一. Thinkphp命名规范

    1.  目录和文件

    • 目录使用小写+下划线;

    • 类库、函数文件统一以.php为后缀;

    • 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;

    • 类文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名;

    • 类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);

    2.  函数和类、属性命名

    • 类的命名采用驼峰法(首字母大写),例如 User、UserType,默认不需要添加后缀,例如UserController应该直接命名为User;

    • 函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip;

    • 方法的命名使用驼峰法(首字母小写),例如 getUserName;

      • 方法和函数区别:函数是单独存在的,方法是依赖于类存在的,比如config()就是函数,而Config::get()就是方法

    • 属性的命名使用驼峰法(首字母小写),例如 tableName、instance;

    • 以双下划线“__”打头的函数或方法作为魔术方法,例如 __call 和 __autoload;

    3.  常量和配置

    • 常量以大写字母和下划线命名,例如 APP_PATH和 THINK_PATH;

    • 配置参数以小写字母和下划线命名,例如 url_route_on 和url_convert;

    4. 数据表和字段

    数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 think_user 表和 user_name字段,不建议使用驼峰和中文作为数据表字段命名。

    5.  应用类库命名空间规范

    应用类库的根命名空间统一为app(不建议更改,可以设置app_namespace配置参数更改,V5.0.8版本开始使用APP_NAMESPACE常量定义);

    二.  主要目录介绍

    常用的目录简介如下:

    • application:网站应用

      • index(自定义的,一个文件夹是一个模块,一般前台以index命令,后台admin命令)

        • controller

        • model

        • view

        • ….

      • common.php: 应用的通用函数,该文件的函数全局的每个文件都可以调用

      • config.php: 应用的通用配置文件

      • database.php: 数据库配置文件

      • route.php:路由配置文件

      • tags.php:应用行为扩展定义文件,用来扩展框架,利用Hook钩子添加行为

    • extend: 扩展类库目录

    • public: WEB 部署目录(对外访问目录)

      • static: 静态资源存放目录(css,js,image)

      • index.php: 应用入口文件

      • router.php: 快速测试文件

      • .htaccess: 用于 apache 的重写

    • runtime:缓存,可以删除该文件更新缓存

    • vendor:第三方类库目录(Composer)

    • thinkphp:框架系统目录

    三.  管理配置

    1.  修改应用文件夹名

    虽然规定application对应命名空间中的app,但是两者毕竟有区别,我们可以将application修改为app,首先将application文件夹重命名为app,接下来打开/public/index.php,修改应用目录即可:

    // 定义应用目录
    define('APP_PATH', __DIR__ . '/../application/'); 将该行内容修改为
    define('APP_PATH', __DIR__ . '/../app/');

    2.  惯例配置

    打开/app/index/controller/Index.php,将内容修改为:

    <?php
    namespace app\index\controller;
    class Index
    {
        public function index()
        {
            dump(config());//当前应用的所有配置
    //        return $this -> fetch();
        }
    }

    此时访问项目主页,可以看到整个应用的所有配置,且配置内容就是/thinkphp/convention.php中的内容,该文件的内容就是thinkphp的惯例配置

    3.  应用配置

    在慕课的教程中,专门为应用配置建立了一个conf文件夹,但是在新版的thinkphp中已经取消了这种做法,我们只需要修改app/config.php中的内容即可,打开该文件,添加以下配置:

    'testconfig' => [
        'app_email' => 'zhangjia@188.com',
        'app_author' => 'zhangjia'
    ],

    此时再访问项目主页,便可以看到我们新添加的这条配置信息,且对所有的模块都有效。如果需要其他的配置文件,则直接修改app/config.php中的内容即可。  

    4.  扩展配置

    有时候我们的项目需要各种各样的配置,如果全部放在config.php中,则维护起来会十分不方便,所以我们可以将其分离,作为扩展配置。比如现在我们有一个和邮件相关的配置需要添加,首先在/app文件夹下新建extra文件夹,并在该文件夹中新建email.php,内容如下:

    <?php
      return [
          'host' => 'smtp@qq.com',
          'name' => 'zhangjia@188.com'
      ];

    此时访问项目主页,便可以在底部看到我们新添加的配置信息,且配置的key就是文件名email

    5.  场景配置

    有时候我们需要在不同的环境中使用不同的配置文件,比如有时候我们服务器上的数据库账号和密码和本地的数据库账号和密码如果不相同,就可以设置不同的场景配置。

    首先在/app/下新建local.php,并添加以下内容:

    <?php
     return [
         'database' => [
             'username' => 'root',
             'password' =>  'zhangjia'
             //....database剩下的所有项也必须配置,否则就只有username和password
         ],
     ]

    继续在该目录下新建server.php,并添加以下内容:

    <?php
     return [
         'database' => [
             'username' => 'test_root',
             'password' =>  '123456'
             //....database剩下的所有项也必须配置,否则就只有username和password
         ],
     ];

    最后打开/app/config.php,添加以下配置:

    'app_status' => 'local',

    如果app_status的内容是local,那么将会加载local.php中的配置,而如果app_status的内容是server,那么将会加载server.php中的配置。

    6.  模块配置

    我们上面的所有配置都是对整个应用的配置,也就是说,应用中的所有模块都会受影响,但是有时候我们希望我们的配置只对单个模块生效,便需要用到模块配置。

    以index模块为例,如果想添加只对index模块生效的配置,我们可以在index模块中新建config.php,在该文件中的配置只有index模块可以使用,其他模块无效。

    7.  动态配置

    动态配置可以对某个控制器或者某个方法进行配置,以/app/index/controller/Index.php为例,如果我们想让自己的配置仅在该类中生效,可以添加以下方法:

    public function __construct(Request $request = null) //必须以__construct命名
    {
      config('before','beforeAction');
    }

    添加了该方法后,当我们执行该类的任何方法之前,都会先执行__construct,此时访问项目主页,可以看到  'before' => string 'beforeAction' (length=12),说明配置已经生效,且如果访问该类中的index方法,在index方法中通过dump(config())输出配置,依旧可以看到该配置信息。

    8. Config类和config()函数

    Config类位于/thinkphp/library/think/Config.php中,而config()函数本质是对Config类作了一层封装,使用起来更加方便。我们可以使用这两者来获取配置、设置配置等操作:

    <?php
    namespace app\index\controller;
    use think\Config; //使用Config类需要先声明Config类的命名空间
    class Index 
    {
    
        public function index()
        {
            //1.  获取所有配置
            //    dump(config());       方法一
            //    dump(Config::get());  方法二
    
            //2.  获取单项配置
            //dump(config('database.username'));        方法一
            //dump(Config::get('database.username'));   方法二
    
            //3.  设置单项配置
            //config('database.username','zhangjia');         方法一
            //Config::set('database.username','zhangjia');    方法二
    
            //4.  设置单项配置,并配置作用域
            config('database.username','zhangjia','big');     //方法一
            Config::set('database.username','zhangjia','big');//方法二
            //5.  按照作用域获取设置
            dump(config('database,username','zhangjia','big')); //方法一
            dump(Config::get('database.username','big'));             //方法二
    
            //6.  其他
            $username = Config::get('gagaga');
            dump($username); //可以将其存入一个变量后再输出,如果不存在,则输出null
    
        }
    }

    9.  环境变量的配置和使用

    _ENV中存放了系统的所有环境变量的相关信息,在ThinkPHP5中,我们可以非常方便的使用和配置环境变量。我们可以通过$_的方法将其输出:

    <?php
    namespace app\index\controller;
    class Index
    {
    
        public function index()
        {
            dump($_ENV);
    
        }
    }

    如果输出为array (size=0) empty,则需要在php.ini中将variables_order 设置为variables_order = “EGPCS”

    接下来我们在项目的根目录中创建.env文件(固定命名),该文件会直接在框架运行的时候执行,可以尝试在该文件中定义相关配置:

    email=zhangjia@188.com
    
    //分组配置:
    [database]
    username=gaga
    password=aaaa

    最后使用我们新添加的配置:

    <?php
    namespace app\index\controller;
    use think\Env;
    class Index
    {
    
        public function index()
        {
            dump($_ENV);
            dump(Env::get('email'));//声明Env后,可以这样获取
            dump(Env::get('database.username')) //获取分组后的配置信息
            dump(Env::get('email','Nothing'));//如果没配置该项,则返回Nothing
            
    
        }
    }

    参考资料

    本文内容根据慕课网乌云龙老师:
    快速入门ThinkPHP 5.0–基础篇
    ThinkPHP官方文档整理而成

  • 0
  • 0
  • 0
  • 2.7k
  • zjmarina穹碧kepu

    请登录之后再进行评论

    登录
    单栏布局 侧栏位置: