杨伟乔
2017-12-09 14:40:19浏览 4716
基础篇
默认采用的是多模块的架构,并且是支持单一的模块设置,所有的模块的命名空间都是以app作为根命名空间 命名空間 common是公共模块,不能直接的访问,但是我们可以在其他的模块中使用 use app\common\controller\xxx as 别名 然后继承下这个引用
配置:
// 定义应用目录
define('APP_PATH', __DIR__ . '/../app/'); 这里的定义的app 就是以前的application 如果我们修改了application为app 这里修改下就可以了
惯例配置:
定义配置文件路径
1.我们打开public 下面的index.php
在这里我们可以重新定义一个常量
// 1.定义一个常量 定义配置文件目录
define('CONF_PATH',__DIR__.'/../conf/');
在app的同级目录,我们新建一个文件夹 conf "__DIR__."这个表示在app的同级牡蛎
//在app中的index 的controller 中的index中 输出config函数
dump(config());
我看可以看到打印出了好多配置
哪里来的呢?
就是惯例配置 : 在thinkphp 下的convention.php中
这个文件就是返回的一个数组,并且是一个多维数组,我们可以在这里加配置 ,但是....
在开发过程中,我们是不允许改变框架的默认配置文件,会对我们以后的框架升级产生影响
应用配置
应用配置的应用场景: 惯例配置我们一般不去修改,但是我们需要当前应用的配置发生变化,所以有了应用配置 对整个应用有效,在当前应用下的所有模块都可以使用
我们在app同级目录上的conf目录中,创建配置文件
必须是config.php文件名
里面写的文件配置,直接返回的是一个数组
return [
'app_email' =>'yangweiqiao@126.com',
];
这就是应用配置
接下来我们看 惯例配置有很多项,一般不去修改它,但是我们怎么去改变它的值呢??
我们只需要在我们刚才创建的conf目录中的config.php 中设置一个相同的配置,然后设置自己的值就可以
他是怎么实现的呢?
其实就是2个数组merge的过程:
$conf1=[
'name' => 'name1'
];
$conf1=[
'name' => 'name2'
];
array_merge($conf1,$conf2);
我们可以在应用配置中添加自己的配置,也可以来修改惯例配置的中配置
扩展配置
扩展配置的应用场景:上面我们说到了应用配置,通过应用配置我们就可以更改我们的默认配置 .通过应用配置我们就可以完成我们的开发工作,并且也可以满足我们的需求
那么,我们用扩展配置来干什么呢?
在我们的实际开发中,我们的配置会很多,比如 session配置 cookie配置 缓存配置,如果将这些配置全部放在应用配置中,
那么这个文件很大,不容易维护,所以就有了扩展配置
//我们看下扩展配置的需求
1.在我们定义的conf目录中,添加新的目录extra,这个文件夹的目录是确定的
,必须是这个名字
2.我们在这个目录中新建文件
比如 email.php
return [
'host' =>'yangweiqiao@126.com',
'name' =>'yangweiqiao'
];
我们刷新下页面,可以看到多了一项配置
["email"] => array(2) {
["host"] => string(19) "yangweiqiao@126.com"
["name"] => string(11) "yangweiqiao"
}
可以看出,一个扩展配置文件,对应的就是添加的一条配置信息
默认的是配置项的key就是文件名,直就是文件返回的值
扩展配置有一个特例
就是数据库的配置文件 database.php 可以直接创建在conf目录下,看来thinkPHP挺人性化的地方 哈哈哈
扩展配置的优先级高于应用配置,就是会直接覆盖应用配置
场景配置
应用场景: 场景听着就知道是在不同场景的时候项目的配置不一样,当我们在公司的时候使用的是公司的配置,在家里的时候使用的是家里的配置,对于这种需求,就有了场景配置
几个重要的特点 :
1.在应用配置文件中,需要定义app_status =>home
2.在config的同级,定义一个home.php 里面返回一个配置
return [
'app_address' =>'home',
];
3,同时定义一个work.php 里面返回一个配置
return [
'app_address' =>'work',
];
.刷新浏览器查看配置文件,我们发现最下面出现了 ["app_address"] => string(4) "home"
修改config中的app_status =work 我们刷新就会看到work下的配置文件生效了
哈哈 ,超级爽
这个还可以怎么用? 定义开发的阶段用的配置 比如 开发环境,测试环境,生产环境
不同的阶段用的服务器 数据库可能不一样
看来这个场景配置还有很有用的呢...
有缺点吗? 有 我们需要注意一点,就是我们使用这种配置的时候,
注意数据库的配置,需要全部配置数据库,不能只配置单一的一条,可能是个BUG,希望可以尽快修复
模块配置(控制器配置)
啊 好多配置啊 ,上面的感觉都已经够用了,怎么还有个模块配置 ?
这个是干什么用的.
哦 之前所有的配置都是对整个应用有效 ,模块配置就是对当前模块有效的配置
模块的单独配置
怎么做!!
1.在conf文件夹下创建和模块相同名字的文件夹 例如 index 对应的就是app里面的index模块
2.新建config.php
在这里写的配置文件只能在index模块中有效
3.如果想单独配置admin模块的,只需要配置下admin
4.同样的这里也可以添加扩展的配置 extra
//动态配置(方法配置)
1.看到这个名字,在代码中添加的配置
2.主要用于当前控制器或者某个方法里面进行动态的配置改变或者是配置设置
3.举例 : app下面的index
//config类 和config助手函数
环境变量配置和使用{ 暂时放置,以后再来看 }
URL和路由
入口文件 public 下面的index
单入口文件: 应用程序的所有http请求都会由一个文件接收,然后转发到功能代码中,
优势: 安全检测 请求过滤
隐藏入口文件 配置Apache的配置文件 和 public下面的.htaccess文件
入口文件的绑定 public 下的index 入口文件中 直接绑定
define('BIND_MODULE','这里输入模块名,就可以限制只访问这个目录' );
可以绑定到模块下的控制器
但是就不能访问其他的模块了
我们可以采用自动绑定的方式: 在程序的配置文件中
设置自动绑定 然后创建public下面的对用的模块.php入口文件
输入入口文件的地址,默认回去app里面找对应的模块,当找不到的时候
会使用默认的入口文件,不会报错,这就是自定绑定,但是,当我们在public下面的index入口
文件中直接使用define,当找不到对应的模块的时候会直接报错,而且还会影响
其他模块的使用
路由,这可不是家里上网的路由
主要是简化url的
//路由学习方法
public function info( $id){//请求里面的参数
//直接访问会地址很长
//改地址 引入路由的概念
//更改配置文件
// 是否开启路由
// 'url_route_on' => true,
// 是否强制使用路由
// 'url_route_must' => false,
//在配置文件下面新建文件 route.php 名字是固定的
//规则很简单 就是一个返回的数组{
return [
'news/:id' =>'api/index/info'
];}
return $id;
}