php快速开发框架津县,BetePHP:一个轻量级快速开发框架

BetePHP

关于

BetePHP是一个轻量级快速开发框架。框架提供了一致的API接口,使得使用接口尽可能流畅;由于框架本身不依赖其他库,这使得框架本身运行速度非常快;框架希望使用最简单的方式make thing done,减少开发者的开发成本。

安装

0.环境要求

PHP >= 5.4.0

PDO扩展

OpenSSL扩展

MbString扩展

1.安装

下载release包安装

打开下面其中一个release包下载页面,选择最新release包下载:

https://github.com/betephp/betephp-release/releases

https://coding.net/u/eccozhou/p/betephp/git/tags

解压zip包,进入项目根目录(下文未特殊注明,目录起始位置均为此根目录)

cd betephp-xxx #进入项目根目录

2.配置

建立app.ini配置文件

按如下操作复制app.ini.example来新建app.ini,然后编辑app.ini以适配当前环境;

cd config

cp app.ini.example app.ini

修改runtime文件夹权限

chmod -R 777 runtime/

3.运行

使用PHP内置Server启动App

cd public

php -S localhost:9090

4.验证

在浏览器打开http://localhost:9090验证页面是否出现用户注册表单页面,点击表单提交是否出现错误信息显示;如均能显示则表示安装成功。

目录结构

app # App命名空间目录

Console # 包含命令行Action

Blog/DailyUpdate.php # ./bete blog:dailyUpdate

Exception # 包含用户自定义异常

Http # 包含Http Action

Home/Index.php # http://localhost/home/index

Middleware # 中间件文件夹

Model # 存放业务Model

view # 包含普通视图和布局视图

bootstrap # bootstrap

app.php # app.php

config # 包含应用配置信息

app.ini # 配置映射文件

app.php # app配置文件

database.php # 数据库配置文件

middleware.php # 中间件配置文件

redis.php # Redis配置文件

route.php # 路由配置文件

session.php # Session配置文件

public # 应用web root, 包含公开访问的内容

index.php # 应用http入口

runtime # runtime目录,包含程序运行期间生成的文件

compiled # 编译文件目录

log # 日志目录

session # 文件session目录

vendor # composer vender

代码生成工具

为了减少新建类时代码复制等重复工作,BetePHP使用命令行简化创建Model、中间件、Action的工作;

# 创建User Model

./bete make:model User

# 创建CheckToken中间件

./bete make:middleware CheckToken

# 创建接口为order/info的HTTP接口

./bete make:http order/info

# 创建order:dailyUpdate定时任务

./bete make:console order:dailyUpdate

接口预览

虽然BetePHP将命名空间尽量简化,使用一个类时还是需要知道类位于哪个命名空间。因此引入应用component,将常用功能封装成一个个的组件,然后通过app()作为入口访问,常用组件及API如下:

# log

app()->log->info('some thing hanppen', $extraInfo);

app()->log->notice();

app()->log->warning();

app()->log->error();

app()->log->data('event_name', $data); # 业务日志打点

# cookie

app()->cookie->set(); # 默认加密,防止客户端修改

app()->cookie->get();

# session

app()->session->set();

app()->session->get();

# 数据库

app()->db->table('user')->where('id', 1)->first();

app()->db->table('order')->where('type', '=' 1)->all();

# 加密

app()->encrypter->encrypt($data);

app()->encrypter->decrypt($data);

# Redis

app()->redis->set();

app()->redis->get();

# 验证

$post = $request->post();

$rules = [

'title' => 'required|string|between:5,50|name:标题',

'content' => 'required|string|name:内容',

'mobile' => 'required|mobile|name:手机号码',

'email' => 'required|email|name:邮箱地址',

];

app()->validator->validate($post, $rules);

文档

详细文档编写中

贡献

https://github.com/betephp/betephp

https://github.com/betephp/framework

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 命令之 vmstat 命令-显示虚拟内存状态

介绍 vmstat 命令的含义为显示虚拟内存状态(“Virtual Memory Statistics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。 常用选项 选项说明-a显示活跃和非活跃内存-f显示从系统启动至今的fork数量-m显示 slabinfo-n只在开始…

python编译后的文件_python 编译源文件

背景近期项目到了部署的阶段。由于项目后台和算法都是用Python "撸的",但是又不希望将源代码直接 "release" 到 “客户”哪里。于是开始思考。。。首先,按照惯性思维,能否将编译后的东东放出去呢?(类似java或…

java创建和销毁一个对象_有效的Java –创建和销毁对象

java创建和销毁一个对象创建和销毁对象(第2章) 这是Joshua Blochs的《 有效的Java》第2章的简短摘要。我仅包括与自己相关的项目。 静态工厂(项目1) 静态工厂与构造函数的一些优点: 工厂方法的名称为构造函数添加了描…

WorkPlus一站式协同解决方案,助力企业降本增效

在企业数字化转型的过程中,很多企业都会遇到一个共同问题:重复建设基础功能,耗费大量时间和资源。为解决这一难题,WorkPlus已经将一些通用、基础且有技术门槛的功能进行了集成与开发,如IM(即时通讯&#xf…

linux在oracle新建表,Oracle创建表及管理表

1. Oracle表的创建及管理创建表包括三个要素,表名,列名,数据类型。每个表都有对应不同的列,每个列都有唯一对应的数据类型。常用数据类型简介:数据类型描述CHARACTER(n)字符/字符串。固定长度 n。INTEGER(p)整数值(没有…

Linux 命令之 top -- 实时显示进程动态/查看进程信息

文章目录介绍常用选项交互命令参考示例示例 1:直接输入命令 top 就可以动态显示进程信息统计参数信息详解进程属性说明(即进程列表的字段说明)其它1.在 top 基本视图中,按键盘数字 1 可以监控每个逻辑 CPU 的状况2.敲击键盘 b&…

Linux 命令之 iostat 命令-监视系统输入输出设备和 cpu 的使用情况

介绍 iostat命令被用于监视系统输入输出设备和 CPU 的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU 使用情况。同 vmstat 一样,iostat 也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分…

else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句

《java开发手册》中:况且日常开发时遇到一推的if-else着实让人头疼!so,现在开始改造一、卫语句卫语句就是把复杂的条件表达式拆分成多个条件表达式,即代码逻辑先考虑失败、异常、中断、退出等直接返回的情况,以方法多个出口的方式&#xff0c…

oracle同步恢复目录,Oracle创建恢复目录(catalog)

Oracle创建恢复目录(catalog),在catalog数据库上创建cat用户的表空间。Oracle创建恢复目录1.在catalog数据库上创建cat用户的表空间SQL> create tablespace cat datafile /home/oracle/oradata/orcl/cat.dbf size 512M;2.创建cat用户SQL> Create user cat ide…

java登录界面命令_Java命令行界面(第3部分):jbock

java登录界面命令在本系列中有关使用Java进行命令行分析的前两篇文章中,我介绍了Apache Commons CLI和args4j库。 在本系列的第三篇文章中,我介绍了jbock ,它是自我描述的“非常简单的CLI解析器”。 我在Java命令行解析中的帖子使用了一些示…

数仓建模 项目_模型设计_数仓建模 PDF 下载

主要内容:数据仓库按照传统的定义,数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。从数据角度,数据仓库更适合传统的数据库,离线采集,数据一般为结构化的。当然…

Linux 命令之 htop -- 互动的进程查看器/查看进程信息

文章目录介绍与 top 的对比常用选项参考示例(一)启动 htop(二)以单色模式启动 htop(三)设置显示更新的延迟为 3 秒(四)显示指定用户的进程介绍 htop 命令是Linux系统中的一个互动的…

java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧

java中转json字符串在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON。 这是在Java中测试和学习解析JSON字符串的最快方法,但…

home oracle c.sql,Infoxmix与Oracle的嵌入式SQLC对比

Infoxmix和Oracle的嵌入式SQL/C开发对比ESQLC和PROC的对比本文档介绍了数据库嵌入式SQL/C语言程序ESQLC和PROC的区别一.基本语法1.语法字符ESQLC中既支持…$?数据库语法,同时也支持“EXEC SQL”,…:?数据库语法PROC中只支持“EX…

spock 集成测试_使用Spock Mocks进行Grails 3.3集成测试

spock 集成测试在Grails单元测试中,可以轻松使用Grails随附的Spock框架来模拟或存根协作者(例如服务)。 “ 测试”一章对模拟协作者, doWithSpring / doWithConfig回调方法,在测试中模拟bean的FreshRuntime批注进行了…

uni开发中可以用table标签么_「uni-app 组件」t-table 表格

table 表格基本使用组件,让你制作简单表格只需要专注内容,而不用过度专注样式。此组件基本全平台支持。(支付宝,百度,头条小程序理论上都支持,但是没有很细致的测试这几个平台)功能亮点自定义全局表格样式自定义局部表…

Linux 命令之 kill -- 杀死进程

文章目录命令介绍语法格式常用选项参考示例(一)列出所有信号的名称(二)杀掉 bash 进程命令介绍 kill 正如这个单词的意思一样,就是杀死。linux 系统中 kill 命令用来删除执行中的程序或工作。 kill 命令用来删除执行…

gwt-2.8.2下载_从GWT开发人员的角度概述Scala.js

gwt-2.8.2下载该博客严重偏向于GWT(和基于GWT的框架),但是我谨记,将来GWT可能会被其他技术取代,因此我们始终愿意探索其他平台/框架。 正如他们所说,多元化可以降低风险。 每种编程语言,即使是最…

Linux 命令之 killall 命令-使用进程的名称来杀死一组进程

文章目录介绍语法格式常用选项参数参考示例介绍 killall 命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程 PID 的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用 ps 等命令再配合…

python selenium 点击开始按钮_使用Selenium和Python单击一个按钮

I have the following code:Expand allWhen I click on expand all, the whole page loads. How can I do it using WebDriver for Python?解决方案As per the HTML you can use the find_element_by_link_text and invoke click() method as follows :driver.find_element_by…