ArPHP

高性能无限扩展微服务架构,为大数据而生

  • Owner: assnr/ArPHP
  • Platform:
  • License::
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

ArPHP

  • 支持composer, 支持php7, 支持restful接口定义
  • 长期支持版本

安装

  1. composer require assnr/arphp
  2. mkdir ori
  3. cd ori
  4. 新建入口文件 index.php

$loader = require '../vendor/autoload.php';

ar\core\Ar::init($loader);

  1. 浏览器访问入口文件查看效果

升级

  • composer update

2018-08-21 v5.1.11
全新升级,构建无限膨胀型应用,为大数据而生。
引入数据驱动微服务架构,无限横向扩展,子项目可独立部署,d_service数据通道,只为构建超级平台生态链。


2017/12/29 支持 restful api 5.0.9发布

restful接口相关项目

  • 直接上代码 (控制器代码)

目录结构说明

  • ar.ason

    ar项目静态配置文件

  • cfg

    配置文件夹

    • cfg/base.php

      全局配置, 第一次安装复制base0.php > base.php, 数据库配置等

    • cfg/main.php

      模块配置

  • ori

    项目目录 建议线上设置的 DocumentRoot

    • ori/index.php

      访问入口文件

    • ori/ctl

      控制器目录

      • ori/ctl/service

        模块控制器中间件service

    • ori/lib

      库目录

      • ori/lib/model

        数据库模型目录

      • ori/lib/module
        全局公共库目录

    • ori/assets

      全局公共css,js等静态资源目录

    • ori/themes

      模块静态js,css等主题资源目录 (默认主题皮肤为def,可扩展,可定制)

    • ori/view

      模块定义模板目录,(默认主题模板为def,可扩展多套模板,可定制)

  • data

    缓存,日志,临时文件目录

  • vendor

    composer框架等目录

常用操作方法

控制器

  • 控制器分配置模板变量

    • 控制器代码

      $this->assign(['hello' => 'arphp', 'anarr' => ['edition' => 'ar5.0']]);

    • 模板使用

      来自控制器字符串 {{hello}}, ar edition {{anarr.edition}}

    • 控制器跳转

      $this->redirect('user');

      $this->redirect(['user/detail', ['id' => 1]]); // 参数类似url生成

      $this->redirectSuccess('user', '操作成功'); // 跳转成功

      $this->redirectError('user', '失败'); // 跳转失败

  • 控制器使用service

    • 新建ori/ctl/main/service/Test.php
<?php
/**
 * Powerd by ArPHP.
 *
 * test service.
 *
 */
namespace ori\ctl\main\service;
/**
 * Default Controller of webapp.
 */
class Test
{
    // in controller $this->getTestService()->myTestFunc();
    public function myTestFunc()
    {
	echo "my test func is called";

    }

}
  • 使用

    $this->getTestService()->myTestFunc()

  • 控制器其他方法

    • init()

      第一个执行的方法, 进行初始化操作,权限验证等

    • $this->showJson(['data' => 'dataname'])

      返回json数据, 自带ret_code, ret_msg

    • $this->showJsonError('没有权限')

      返回错误json信息, 自带ret_code, ret_msg,err_msg

    • $this->showJsonSuccess('更新成功')

      返回成功json信息, 自带ret_code, ret_msg,err_msg

    • $this->display()

      渲染action同名的模板

    • $this->display('user')

      渲染user.html模板, 默认模板后缀为.html, 可修改配置

数据库模型

  • 配置文件 cfg/base.php

    • 修改节点components.db.mysql.config节点 需要开启PDO_MYSQL扩展

    • 修改对应的参数 dsn: 连接字符(包含数据库名和端口号等), user: 用户名, pass: 密码, prefix: 表前缀

  • 数据库模型使用

    • 新建模型文件 ori/lib/model/Test.php
  <?php
	namespace ori\lib\model;
	/**
	 * Test model.
	 */
	class Test extends \ar\core\model
	{
	    // 表名
	    public $tableName = 'test';

	    // 插入一条数据
	    public function addTest($data)
	    {
		      $add = self::model()->getDb()
		        ->insert(array(
		        'username' => 'ceshi',
		      ));
      		if ($add) {
      		    return true;
      		}
	    }
	}
  • 数据库常用操作

    • 查询

      • 按条件查一行 , 查所有字段, 返回一维数组
        \ori\lib\model\Test::model()->getDb()->where(['username' => 'ceshi'])->queryRow();

      • 按条件查一行, 自定字段
        \ori\lib\model\Test::model()->getDb()->select(['username', 'userid'])->where(['username' => 'ceshi'])->queryRow();

      • 直接返回username列字符串
        \ori\lib\model\Test::model()->getDb()->select(['username', 'userid'])->where(['username' => 'ceshi'])->queryColumn('username');

      • 查所有, 返回二维数组, = where 传入空数组
        \ori\lib\model\Test::model()->getDb()->queryAll();

      • 按条件查所有, 返回二维数组
        \ori\lib\model\Test::model()->getDb()->where(['username' => 'ceshi'])->queryAll();

      • 按条件查所有 ,id 排序
        \ori\lib\model\Test::model()->getDb()->where(['username' => 'ceshi'])->order('id desc')->queryAll();

      • 按条件查所有 ,id 排序, id为键值
        \ori\lib\model\Test::model()->getDb()->where(['username' => 'ceshi'])->order('id desc')->queryAll('id');

      • 按条件查所有 id 排序, 最多10条,limit一般配合分页类
        \ori\lib\model\Test::model()->getDb()->where(['username' => 'ceshi'])->order('id desc')->limit(10)->queryAll();

      • 分组查询
        \ori\lib\model\Test::model()->getDb()->where(['username' => 'ceshi'])->group('id')->queryAll();

      • 联表查询,不推荐
        \ori\lib\model\Test::model()->getDb()->where(['username' => 'ceshi'])->join, leftJoin, rightJoin('other table name')->queryAll();

    • 修改

      • 条件修改username为chshi2, 返回影响行数
        \ori\lib\model\Test::model()->getDb()->where(['username' => 'ceshi'])->update(['username' => 'ceshi2']);
    • 添加

      • 插入数据 username为chshinew, 返回主键last insert id
        \ori\lib\model\Test::model()->getDb()->insert(['username' => 'ceshinew']);

      • 批量插入数据 , 返回boolean
        \ori\lib\model\Test::model()->getDb()->batchInsert([['username' => 'ceshinew'], 'username' => 'hehe']]);

    • 删除

      • 条件删除, 返回 boolean
        \ori\lib\model\Test::model()->getDb()->where(['username' => 'ceshi'])->delete();

其他操作如跨库,多数据库,其他数据库类型等请加群讨论

View(视图层)

  • 模板使用变量

    • {{C.PATH.GPUBLIC}}
      assets目录

    • {{C.PATH.PUBLIC}}
      模块themes目录, 后台可以配置读取不同的theme,适合多风格模板切换改版

    • {{date('Y-m-d, H:i:s', time())}}
      模板中出现括号“()”字符, 将自动echo出来

    • {{valueData}}
      自动echo, 错误的写法 {{$valueData}}, 正确的是不加$的

  • 模板标签

    • <if exp="$zhangsan == '张三'">我是张三<else/>我是谁?</if>
      if语句写法,exp里面完全是php代码

    • <for exp="$i = 0; $i < 3; $i++">count: {{i}}</for>
      for循环,exp里完全是php语法

    • <for exp="$key in $actionData" as="item">{{item.dataname}}</for>
      for循环2,actionData为后端分配过来变量 转换成foreach语法了

    • <php>echo time(); </php>
      里面完全php代码, 不推荐

    • <import from="要导入的文件" name="导入的具体名字标记">some extend string</import>
      导入模板,模板公用常用, extend 需要实现 export文件里的对应标记如:

	<import from="/Layout/global" name="html5">
	    <extend name="title">
		  {{welcomeTitle}},  this is html title
	    </extend>
	    <extend name="body">
		<h1>
		    {{welcomeTitle}}, version: {{constant("AR_VERSION")}}
		</h1>
	    </extend>
	</import>
  • <export name="html5">some tpl string</export> 导出模板如:
	<export name="html5">
	<html>
	    <head>
		<title>
		    <extend name="title"/>
		</title>
		<extend name="css"/>
		<extend name="jshead"/>
	    </head>
	    <body>
		<extend name="body"/>
	    </body>
	    <extend name="jsfoot"/>
	</html>
	</export>

其他常用公共变量及方法

  • 常用公共函数

    • \ar\core\get()
      获取$_GET数据, 转义了一些原生过来的数据

    • \ar\core\get('name')
      获取$_GET['name']数据

    • \ar\core\post()
      获取$_POST数据

    • \ar\core\request()
      获取$_REQUEST数据

  • comp函数

    • \ar\core\comp('lists.session')->set('uid', 1)
      设置session

    • \ar\core\comp('lists.session')->get('uid')
      获取$_SESSION['uid']

    • \ar\core\comp('lists.session')->flush()
      清除session

    • \ar\core\comp('cache.file')->set('uk', 123, 60)
      文件类型,设置缓存uk = 123, 60秒后过期,为0 永不过期

    • \ar\core\comp('cache.file')->get('uk')
      文件类型获取缓存uk

    • \ar\core\comp('tools.log')->record(['d' => 'dname'], 'logfile')
      打日志,以日期目录可在data/log查看

    • \ar\core\comp('tools.Util')->getClientIp()
      获取客户端IP,

    • \ar\core\comp('tools.Util')->substr_cut($str, $len, $charset="utf-8")
      截取字符串, util其他函数可查看源文件

    • \ar\core\comp('ext.upload')-upload($upField, $dest = '上传目标地址', $extension = 'all')
      上传文件 , upField post过来的文件标志id

  • 获取配置 全局配置文件 cfg/base.php , ar.ason文件CONFIG 位置

    • \ar\core\cfg()
      所有配置

    • \ar\core\cfg('cfgkey0')
      具体配置

    • \ar\core\cfg('cfgkey0.subkey')
      子配置

    • \ar\core\cfg('cfgkey0', 'defautValue')
      具体配置, 如果未设置, 返回defaultValue

    • 获取路由参数

      • \ar\core\cfg('requestRoute')
        用于动态配置信息,权限验证等
    • 动态设置配置

      \ar\core\Ar::setConfig('hello', '周五')

  • 其他系统可配置的参数

    • URL_MODE
      URL生成模式,默认PATH

    • DEBUG_SHOW_TRACE
      URL生成模式,默认false

    • URL_MODE
      URL生成模式,默认PATH

    • DEBUG_LOG
      错误日志写入文件, 需要AR_DEBUG=false

    • TPL_SUFFIX
      模板后缀,默认html

    • URL_ROUTE_RULES
      路由规则,群里讨论

    • theme
      主题, 默认def

    • REBUILD_TPL_CACHE
      是否每次重建模板缓存,默认true,建议在线上设置false,加快访问速度

    • moduleLists
      模块列表 默认['main'], 加入新的需要修改此处,可以在ar.ason配置

说明:cfg/base.php 配置可以覆盖ar.ason配置,模块配置覆盖base配置

  • 全局常量

    • AR_DEBUG
      是否调试模式, 默认true

    • AR_ROOT_PATH
      入口文件上级目录, 系统跟目录

    • AR_ORI_NAME
      默认ori

    • AR_ORI_PATH
      ori目录, 建议的DocumentRoot, 网站根目录

    • AR_SERVER_PATH
      服务地址

    • AR_DEFAULT_APP_NAME
      默认访问模块名字,默认为main

    • AR_DEFAULT_CONTROLLER
      默认为 Index

    • AR_DEFAULT_ACTION
      默认action 为index

  • 链接生成

    • \ar\core\url('otheraction')
      生成otheraction路由请求地址

    • \ar\core\url(['user/otheraction', ['uid' => 123]])
      生成User/otheraction路由, 带参数uid = 123

    • \ar\core\url(['/system/user/otheraction', ['uid' => 123]])
      生成其他模块system 下面User/otheraction路由, 带参数uid = 123

    • \ar\core\url(['user/otheraction', ['uid' => 123]], 'PATH, QUERY, FULL')
      生成User/otheraction路由, 带参数uid = 123, 生成链接的形式, 默认PATH

    • \ar\core\url(['user/otheraction', ['uid' => 123, 'greedyUrl' => true]])
      生成User/otheraction路由, 带参数uid = 123, 生成链接的形式, 贪婪模式,保留之前请求的其他参数,筛选分类等常用

  • 调用module

一般比较公用各个模块都可以调用的方法, 相对于 service 是当前模块的调用

  • \ar\core\module('Test')->testFunc() ori\lib\module\Test.php
    自定义类, 可以定义initModule() 每次调用初始化方法
  • 访问路由说明
    • 入口文件.php/modulename/contro/action
      • 解释
        • modulename 模块 对应 a_m
        • contro 控制器名字 对应 a_c
        • action 里面的方法 对应 a_a

默认的模块访问可省略modulename

文档先写这么多吧,基本常用的操作都写了,纯手工打造, 好累, 写完了还要继续写代码(>﹏<),还请标个星星 %>_<%

其他说明

windows下面安装composer及ar方式

  1. 下载https://getcomposer.org/Composer-Setup.exe
  2. 安装会提示设置php命令行地址, 如 C:\phpStudy\php\php-5.4.45\php.exe
  3. 设置中国镜像 cmd 输入命令:
    composer config -g repo.packagist composer https://packagist.phpcomposer.com
  4. cmd 命令行: composer require assnr/arphp
    注意:需要在空文件夹下面运行, 如 webcode
  5. 进入webcode文件夹 , 再新建一个文件夹 ori , 写入ori/index.php
    内容为
<?php
$loader = require '../vendor/autoload.php';
ar\core\Ar::init($loader);
  1. 浏览器访问index.php , 然后开始你的骚码编程

以前版本

之前老版本有问题请到群里提问,老版本的文档将停止更新

2017/08/30 arphp4.0.1 下载方式,交流群

  • 文档地址:coop云开发(基于arphp4开发)http://www.coopcoder.com/ziyuan-982.shtml 网站改版中,请期待

  • 加入控制器service ,命名空间 ,ason配置,目录灵活配置,支持php7,需要php5.3以上,ATML全新模板引擎,更优化的代码结构,

  • WEB目录隔离,更加安全,全新的框架,文档制作中。。。

  • 类加载模式:系统

  • 注意:start方式

    • {folder}/web/index.php
<?php  include '../ArPHP/init.php';

2017/06/20 更新 3.0版本 下载方式,交流群

文档http://www.arphp.org/doc/index.html
加入ATML模板引擎,
加入WEB CLI模式

不兼容arphp3之前的版本,PHP 版本需要5.3及以上

ATML风格一缆

ATML纯HTML风格PHP模板引擎,支持模板重用,继承,导出,导入
<if exp="$a == 123">
    a  {{array.info.user.name}}
<elseif exp="$b == 111"/>
    b
<else/>
    <if exp="$c == 123">
    c
    </if>
</if>

<for exp="$key in $lists" as="list">
   {{list.id}}
   <p>普通html代码</p>
   {{list.name}}
</for>

2015/5/9更新 arphp2.0发布 下载方式,交流群

  • 文档http://www.arphp.org/doc/index.html

  • 增加Lib库文件目录,推荐公用Model ,Module放入目录,支持命名空间加载公共库

  • 如 arModule('Lib/Hello')->sayworld() 调用 namespace Lib/Module/Hello

  • 单文件框架保持同步

  • 优化代码增强性能

  • 增加ArView核心视图动态渲染模板主题加载,解决传统资源文件引入混乱问题,前后端不统一资源引入问题等

  • 增加微信公众号组件

2014/5/26 arphp2.0.1 支持php5.3以前的版本

  • 增加 WEB_CLI模式
  • 以web cli 方式运行项目 入口文件cli.php
define('AR_AS_WEB_CLI', true);
include 'arphp.php';
  • 运行
    php cli.php /main/User/info
    执行main/UserController/infoAction 方法

更早版本,请加开发群下载

更多使用帮助及例子

  • 加入ArPHP开发交流群 : 259956472

Main metrics

Overview
Name With Ownerassnr/ArPHP
Primary LanguagePHP
Program languagePHP (Language Count: 1)
Platform
License:
所有者活动
Created At2014-06-04 02:41:34
Pushed At2019-02-26 10:36:28
Last Commit At2019-02-26 18:33:53
Release Count28
Last Release Namev5.1.13 (Posted on 2019-02-26 18:33:53)
First Release Namev5.0.1 (Posted on 2017-10-17 13:06:47)
用户参与
Stargazers Count57
Watchers Count7
Fork Count15
Commits Count170
Has Issues Enabled
Issues Count1
Issue Open Count1
Pull Requests Count0
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private