博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构建php frame
阅读量:4960 次
发布时间:2019-06-12

本文共 3016 字,大约阅读时间需要 10 分钟。

使用composer的自动加载、命名空间及shell脚本,构建原生php框架

 

# smarty-frame

运用php构建自己的框架

根目录/application:应用程序核心目录

  根目录/configs下:

    config:应用配置文件
    db:数据库配置文件
    routes:路由配置文件
    fileCache:文件缓存配置
    redisCache:redis缓存配置

  根目录/src下:考虑将来框架可能还要支持php脚本的执行,所以要将base和web分开,将来要加php脚本时,只需要建立一个console的文件夹就好了。

    base:存放基础的类
      base下:
        Application:框架底层基础类
          一个抽象类,实现了一个简单的run方法,run方法就是去执行以下handleRequest方法。
          定义了一个抽象方法handleRequest,等待被继承,实现。
        Controller:包含控制器逻辑的基类
          不需要每写一个要去渲染页面的action,都要去找相应路径的view,然后把它require进来。
          所以抽象出一个Controller的基类,实现一个渲染页面的方法,让其他的controller继承,就可以使用相应的方法。
        Error:框架错误类
        Functions:框架公共函数类
        Route:路由控制实现类
        Component:基类,用于存放必须引入的但是有些类没有的方法,防止调用出错

  cache:存放缓存相关类

    CacheInterface:缓存接口类,定义接口参数
    FileCache:文件缓存类
    主要思想就是,每一个 key 都对应一个文件,缓存的内容序列化一下,存入到文件中,取出时再反序列化一下。剩下的基本都是相应的文件操作了。
    RedisCache:redis缓存类

  web:存放与web相关的类

    Application:与web相关的类
    所有程序都经过这里
    Controller:包含控制器逻辑的基类
      不需要每写一个要去渲染页面的action,都要去找相应路径的view,然后把它require进来。
      所以抽象出一个Controller的基类,实现一个渲染页面的方法,让其他的controller继承,就可以使用相应的方法。

  view:存放视图文件相关类

    Compiler:网上找的一个自己写的模板转换源码
    Smarty:引入smarty进行模板编译,并重新配置smarty
    (其实原理都一样,就是将模板中特定字符串正则解析成php代码,然后将转换后的模板内容保存起来,供下次调用)

  db:数据库交互Model类

    ModelInterface:数据模型接口类
    Model:数据模型基类,继承此类可由Model层直接进行数据交互
    Connection:连接类,用于数据库、缓存等创建连接实例
    DbClient:调用此类进行数据交互

  Sf:帮助类,提供公共框架功能。

根目录/public:入口文件、静态文件夹

根目录/runtime:

  cache:缓存文件夹

根目录/vendor:composer文件夹

 

路由规则(省略了模块名,及 域名/api(没有则默认为web模块)/方法名?参数):

  vbox-selfframe.cn/api/index
  vbox-selfframe.cn/index
  vbox-selfframe.cn/smarty-view
  vbox-selfframe.cn/backend/index

shell之创建文件夹

[root@vbox-nginx shell_command]# vi mkdir.sh#!/bin/shparentDir="/media/sf_Project/self/smarty-frame/application/$1"fileName=$2dirAndName=$parentDir/$fileNameif [ ! -d "$dirAndName" ];thenmkdir $dirAndNameecho "创建文件夹成功"elseecho "文件夹已经存在"fi

调用shell创建文件夹:

[root@vbox-nginx shell_command]# ./mkdir.sh ApiLoveHouse Model //上级文件夹 要创建的文件夹名
创建文件夹成功

shell之创建php文件

[root@vbox-nginx shell_command]# vi mkfile.sh#!/bin/shparentDir="/media/sf_Project/self/smarty-frame/application/$1"fileName=$2dirAndName="$parentDir/$fileName.php"string=${parentDir#*application}namespace=$(echo $string | sed 's#\/#\\#g')if [ ! -d "$parentDir" ];thenecho "父级文件夹路径错误"elsecd $parentDirif [ ! -f "$dirAndName" ];thentouch $dirAndNameecho "
$dirAndNameif [[ $fileName == *$strCon* ]];thentouch $dirAndNameecho "
$dirAndNameif [[ $fileName == *$strCon* ]];thenecho "namespace App$namespace;" >> $dirAndNameelif [[ $fileName == *$strMod* ]];thenecho "namespace App\$namespace;" >> $dirAndNameelseecho "当前只能创建controller和model文件"fiecho "" >> $dirAndNameecho "class $fileName{
" >> $dirAndNameecho " //" >> $dirAndNameecho "}" >> $dirAndNameecho "?>" >> $dirAndNameecho "文件创建完成"elseecho "文件已经存在"fififi

调用shell创建文件:

[root@vbox-nginx shell_command]# ./mkfile.sh ApiLoveHouse/Controllers WelcomeController //上级文件夹 要创建的文件名
文件创建完成

github地址:

转载于:https://www.cnblogs.com/two-bees/p/10917353.html

你可能感兴趣的文章
清除浮动
查看>>
PayPal(贝宝)支付接口、文档、IPN
查看>>
ORACLE 10G R2_执行计划中cost cardinality bytes cpu_cost io_cost解释
查看>>
关于this和base
查看>>
本地存储
查看>>
MP3的播放与停止
查看>>
牛客(59)按之字形顺序打印二叉树
查看>>
JavaScript 图表库 xCharts
查看>>
Android项目的目录结构
查看>>
C++中“引用”的底层实现
查看>>
vuex中的dispatch和commit
查看>>
mybatis实战教程二:多对一关联查询(一对多)
查看>>
NodeMCU文档中文翻译 3 构建固件
查看>>
前端学习☞jquery
查看>>
10分钟搞懂树状数组
查看>>
Spring Cloud与微服务构建:微服务简介
查看>>
HTTP缓存和CDN缓存
查看>>
HDU-1171 Big Event in HDU(生成函数/背包dp)
查看>>
Babel 是干什么的
查看>>
cocos2dx-3.0(8)------Label、LabelTTF、LabelAtlas、LabelBMFont使用之法
查看>>