composer 的安装
先安装composer,官网安装就行
中文官方网站curl -sS https://getcomposer.org/installer | php
初始化
composer init
composer.json文件可以手写.1
2
3
4{
"name": "arkin/okool",
"require": {}
}
引用自动加载类
执行composer dump-autoload --optimize
自动创建vendor目录和autoload文件
新建入口文件
入口index.php,如下目录名没要求.能访问就行.
引用自动加载类,根据目录相对路径引用.
创建框架核心文件
与业务独立,单独创建一个目录如bootstrap
放框架核心文件.
这样一个最原始的框架就运行起来了.
新建src源码目录
如上我们使用了app
目录作为src
目录
创建基础 MVC三层结构.
在composer.json
中加入 自动加载命名空间.1
2
3
4
5
6
7
8"autoload": {
"psr-4": {
"App\\": "app/"
},
"files":[
"app/Helpers/functions.php"
]
}
说明:
尽量使用psr-4
命名空间标准.1
2
3"psr-4": {
"App\\": "app/"
}
表示使用psr4的标准,App
命名空间指向 app/
这个目录.自动加载类会按psr4的标准到app这个目录寻找加载类.1
2
3"files":[
"app/Helpers/functions.php"
]
files
是一个加载文件数组,一般放公共函数等与业务无关代码,这里会提前加载.
修改autoload
配置后需要重新执行composer dump-autoload --optimize
以便autoload 类优化完成缓存.
文件目录如下:
现在我们可以使用命名空间执行controller
的方法了.
一个项目不可能只有一个控制器,那么就需要使用到路由
自动加载控制器了.
路由
一个框架,最关键的是路由,不然就是一堆代码,不叫框架.
可以引用别人的路由类,也可以自己写.
我们先写一个简单的,了解原理后,再引用别人成熟的.
.
解析URL/Cli路由
我们想要访问的如 http://xxx.com/home/index
这样的地址,home代表home控制器 index方法
实现步骤:
- 把index.php隐藏掉,需要用到URL重写,方法有
.htaccess
,’apache重写’,’nginx的重写’ - 获取到
home
和index
- 其它参数,其它参数先不考虑.
- 支持默认控制器和方法
为了方便,我们还支持cli
模式的访问,如php index.php home index
Router类如下:
测试一下:
OK.
路由自动加载
得到了Controler
和Action
,我们要拼装成访问类,并执行.
App 类改造一下.
如下:
测试结果:
至此,一个包含路由和自动加载的框架完成.
配置文件
可定制化的框架,不能用硬编码,可配置原则.
我们引用配置文件.
配置文件一般使用,array
,.ini
,json
,yaml
等.
框架内部,使用php 数组配置,框架外部我们使用.env
文件.
分析,原理:
- 解析
.env
文件 - 使用
putenv
把环境变量注册到$_ENV中 - 其它地方便可以使用
getenv
函数获取环境变量的值了
这么麻烦的事我们使用现成的吧.优秀的类Dotenv
使用composer安装composer require vlucas/phpdotenv
.env
,文件放在根目录下,文件如下
完成后就可以使用了,一般在框架加载前载入配置文件.
使用ORM类
数据库操作,避免手写SQL带来的不可控问题,统一管理,做数据迁移,更换数据驱动等.我们需要使用ORM操作.
网上有很多优先的ORM操作类,这里我使用的是.Laravel 的 Eloquent
安装Eloquent
composer 安装1
composer require illuminate/database
注意要求,官方现在(201904)必须要php7.1以上
编写配置文件
按官方文档写,也可以参考laravel写.
连接数据库
1
2
3
4
5
6public function connection(){
$capsule = new Capsule;
$config=require (self::$ROOT.'/./config/database.php');
$capsule->addConnection($config['connections'][$config['default']]);
$capsule->bootEloquent();
}
编写Model
继承Model就行.
创建表
使用Model
测试,OK.
至此,框架已经使用了ORM操作类.
如果纯写API,基本差不多了.
日志
每个系统都需要一个日志系统,去分析记录系统运行情况.
关于日志,强烈介意,反感没有规范的日志系统.
日志除了开发人员看,还需要对接其它日志组件,必须符合规范,不然以后日志处理成本很大.
我们必须使用psr-3
日志规范,符合这个规范的才能使用.
我们这里引用 monolog
.
官方GIT
安装
composer require monolog/monolog
使用
重写一个Log
单例.
重载几个主要方法 info,debug,log,error等.
使用 Log::log('msg','content');
一个小小的框架就完成了.
完整的框架,包含事件,异常处理,队列,视图,前端模板等.
本文作者:阿金
本文链接:http://www.hi-arkin.com/2019/04/21/PHP/composer/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
扫描二维码,分享此文章