Hi,阿金 ...

使用Composer搭建自己的框架

发表: 2019-04-21 分类:

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方法
实现步骤:

  1. 把index.php隐藏掉,需要用到URL重写,方法有.htaccess,’apache重写’,’nginx的重写’
  2. 获取到homeindex
  3. 其它参数,其它参数先不考虑.
  4. 支持默认控制器和方法

为了方便,我们还支持cli模式的访问,如php index.php home index

Router类如下:

测试一下:

OK.

路由自动加载

得到了ControlerAction,我们要拼装成访问类,并执行.
App 类改造一下.
如下:

测试结果:

至此,一个包含路由和自动加载的框架完成.

配置文件

可定制化的框架,不能用硬编码,可配置原则.
我们引用配置文件.
配置文件一般使用,array,.ini,json,yaml等.
框架内部,使用php 数组配置,框架外部我们使用.env文件.
分析,原理:

  1. 解析.env文件
  2. 使用 putenv 把环境变量注册到$_ENV中
  3. 其它地方便可以使用 getenv 函数获取环境变量的值了
    这么麻烦的事我们使用现成的吧.优秀的类 Dotenv
    使用composer安装
    composer require vlucas/phpdotenv
    .env,文件放在根目录下,文件如下

完成后就可以使用了,一般在框架加载前载入配置文件.

使用ORM类

数据库操作,避免手写SQL带来的不可控问题,统一管理,做数据迁移,更换数据驱动等.我们需要使用ORM操作.
网上有很多优先的ORM操作类,这里我使用的是.Laravel 的 Eloquent

安装Eloquent

官方github

composer 安装

1
composer require illuminate/database

注意要求,官方现在(201904)必须要php7.1以上

编写配置文件

按官方文档写,也可以参考laravel写.

连接数据库


1
2
3
4
5
6
public 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 许可协议。转载请注明出处!

扫描二维码,分享此文章