Skip to content

PHP编码规范

ECOS命令行模式

执行 cd app/base && php cmd help 查看所有可用命令

例:

shell
# 生成数据字典
php cmd dev:doc dd > OMS数据字典

标准开发规范

参考 PSR PHP 标准规范 - PHP编码规范


标准注释规范

php
<?php
  /**
  * @name 名字
  * @abstract 申明变量/类/方法
  * @access 指明这个变量、类、函数/方法的存取权限
  * @author 函数作者的名字和邮箱地址
  
  * @category 组织packages
  * @copyright 指明版权信息
  * @const 指明常量
  * @deprecate 指明不推荐或者是废弃的信息
  * @example 示例
  * @exclude 指明当前的注释将不进行分析,不出现在文挡中
  * @final 指明这是一个最终的类、方法、属性,禁止派生、修改。
  * @global 指明在此函数中引用的全局变量
  * @include 指明包含的文件的信息
  * @link 定义在线连接
  * @module 定义归属的模块信息
  * @modulegroup 定义归属的模块组
  * @package 定义归属的包的信息
  * @param 定义函数或者方法的参数信息
  * @return 定义函数或者方法的返回信息
  * @see 定义需要参考的函数、变量,并加入相应的超级连接。
  * @since 指明该api函数或者方法是从哪个版本开始引入的
  * @static 指明变量、类、函数是静态的。
  * @throws 指明此函数可能抛出的错误异常,极其发生的情况
  * @todo 指明应该改进或没有实现的地方
  * @var 定义说明变量/属性。
  * @version 定义版本信息
*/

OMS开发规范

命名定义

service命名

格式:{app}.service.{类}.{方法}.{after/before}

按钮权限命名

格式:{app}.action.{业务}.{add/del}

对象变量命名

使用Mdl后缀作为model目录下类对象变量,使用Obj后缀作为lib目录下类对象变量,例:

php
$orderMdl = app::get('ome')->model('orders');

$orderObj = kernel::single('ome_order');

类方法声明

类声明必须指定使用域:public、protected、private。

私有方法,以英文下划线(_)开头。

使用index前缀作为finder列表。

使用display前缀作为Dailog加载页面,并使用驼峰形式。

使用page前缀作为右侧加载页面,并使用驼峰形式,例:

php
// 列表页
public function indexOrder()
{
	$this->finder('ome_mdl_orders'); 
}

// dailog页
public function displayAddOrder()
{
	$this->display('add.html');
}

// 右侧页
public function pageAddOrder()
{
	$this->page('add.html');
}

// ajax查询
public function addOrder()
{
  	$data = [
    	'order_bn' => '1234567890'
    ];
	$this->splash('success', null, '成功', '', $data);
}

// ajax提交
public function addOrder2()
{
  	$this->begin($this->url);
  
	list($rs, $msg) = kernel::single('ome_order')->addOrder($param);

  	$this->end($rs, $msg);
}

类方法返回

使用状态+信息的方式,例:

php
public function addOrder($param)
{
	return [false, ['msg'=>'创建失败']];
}

类属性命名

使用英文名词、动词,以大写字母作为词的分隔,其他的字母均使用小写,单词的首个字母。

私有属性,使用英文下划线(_)开头。

类常量,使用大写命名,例:

php
class A
{
	public $shipName = '收货人姓名';
  
  	private $_shipName = '收货人姓名';
  
  	const SHIP_STATUS = 0;
}

Dailog定义

Dailog页面加载

使用display加载页面

php
public function displayAdd()
{
	$this->display('add.html');
}

Dailog页面渲染

确认按钮,取消按钮使用area标签,并使用统一JS触发form表单提交,例:

html
<div class="tableform">
    <div id="add-errorinfo" class="error" style="display:none;"></div>
  	<form id="add-form">
    		<div class="division">
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <th><em class="c-red">*</em> label1</th>
                        <td></td>
                    </tr>
                </tbody>
            </table>
        </div>
    		<div class="division">
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <th><em class="c-red">*</em> label2</th>
                        <td></td>
                    </tr>
                </tbody>
            </table>
        </div>
  	</form>
</div>
<{area inject=".mainFoot"}>
<div class="table-action">
    <{button label="确定" class="btn-primary" id="add-submit"}>
    <{button label="取消" class="btn-secondary" isCloseDialogBtn="true" }>
</div>
<{/area}>
  
<script type="text/javascript">
(function(){
    $('add-submit').addEvent('click',function(){
        $('add-form').fireEvent('submit',{stop:function(){}});
    })
  
    $('add-form').store('target', {
        onRequest:function(){
            $E('#add-submit').disabled = true
            $E('#add-submit span span').setText('提交中...')
            $('add-errorinfo').hide()
        },
        onComplete:function(resp){
            $E('#add-submit').disabled = false
            $E('#add-submit span span').setText('确定')
            resp = JSON.decode(resp);
            if (resp.error){
                return $('add-errorinfo').setText(resp.error).show();
            }
            $('add-form').getParent('.dialog').retrieve('instance').close();
        }
    })
})()  
</script>

AJAX请求

使用框架统一方法wpage,例:

javascript
<script type="text/javascript">
 W.page('index.php?app=ome&ctl=admin_order&act=show',{
  update:$('order-content'),
  method:'GET',
  data:{
  	p:['taobao','10.00'],
    order_id: '1'
  },
  clearUpdateMap:false
});
</script>

HTML统一页面结构

html
<div class="form-layout">
  <form>
    <div class="form-layout-block">
      <h3>块标题</h3>
      <div class="form-layout-fields">
        <div class="form-field">
          <span class="form-field-label">小块类型</span>
          <div class="form-radios">
            <label><input name="sex" type="radio" value="1">单选按钮</label>
          </div>
        </div>
        <div class="form-field">
          <span class="form-field-label">N个小块</span>
          <input class="form-input" placeholder="请输入" />
        </div>
      </div>
    </div>
    <div class="form-layout-block">
      <h3>第二块信息</h3>
      <div class="form-layout-fields">
        <!-- 普通输入 -->
        <div class="form-field">
          <span class="form-field-label">名称:</span>
          <input class="form-input" placeholder="请输入" />
        </div>

        <!-- 下拉选择 -->
        <div class="form-field">
          <span class="form-field-label">名称:</span>
          <select class="form-input" placeholder="请选择">
            <option value="1">张三</option>
            <option value="2">李四</option>
          </select>
        </div>

        <!-- 单选 -->
        <div class="form-field">
          <span class="form-field-label">单选:</span>
          <div class="form-radios">
            <label><input name="sex" type="radio" value="1">单选按钮1</label>
            <label><input name="sex" type="radio" value="2">单选按钮2</label>
          </div>
        </div>
      </div>
    </div>
    <div class="form-layout-block">
      <h3>如果需要名称与输入框在一行展示需要加上类名"form-layout-fields-column"</h3>
      <div class="form-layout-fields form-layout-fields-column">
        <div class="form-field" style="width: 100%">
          <span class="form-field-label">上传文件:</span>
          <div>
            <button class="btn-primary">选择文件</button>
            <span>未选择任何文件</span>
          </div>
        </div>
        <!-- 普通输入 -->
        <div class="form-field">
          <span class="form-field-label">普通输入:</span>
          <input class="form-input" placeholder="请输入" />
        </div>

        <!-- 下拉选择 -->
        <div class="form-field">
          <span class="form-field-label">下拉选择:</span>
          <select class="form-input" placeholder="请选择">
            <option value="1">张三</option>
            <option value="2">李四</option>
          </select>
        </div>

        <!-- 单选 -->
        <div class="form-field">
          <span class="form-field-label">单选:</span>
          <div class="form-radios">
          <label><input name="sex" type="radio" value="1">单选按钮1</label>
          <label><input name="sex" type="radio" value="2">单选按钮2</label>
          </div>
        </div>

        <!-- 多选 -->
        <div class="form-field">
          <span class="form-field-label">多选:</span>
          <div class="form-checkbox">
            <label><input  name="sex" type="checkbox" value="1">选项1</label>
            <label><input  name="sex" type="checkbox" value="2">选项2</label>
            <label><input  name="sex" type="checkbox" value="3">选项3</label>
          </div>
          <p class="form-remark">选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3</p>
        </div>

        <!-- 禁用状态 -->
        <div class="form-field">
            <span class="form-field-label">文本框禁用状态:</span>
            <input class="form-input form-disabled" placeholder="请输入" />
            <p class="form-remark">选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3选项3</p>
        </div>

        <!-- 文本域 -->
        <div class="form-field" style="width: 50%">
            <span class="form-field-label">文本域:</span>
            <textarea class="form-input" style="height: 100px" placeholder="请输入文本域" ></textarea>
        </div>

        <!-- 提示信息 -->
        <div class="form-field">
            <span class="form-field-label">提示信息<i class="iconfont icon-question-circle1" title="提示信息"></i>:</span>
            <input class="form-input" placeholder="请输入" />
        </div>

        <!-- 按钮 -->
        <div class="form-field">
            <span class="form-field-label">按钮</span>
            <button class="btn-primary">普通确定</button>
            <button class="btn-danger">高亮红色</button>
            <button class="btn-primary" disabled="disabled">按钮禁用</button>
        </div>
      </div>
    </div>
    <div class="form-actions">
      <!-- 按钮页面底部固定 -->
      <a class="btn btn-default">关闭</a>
      <button class="btn-primary">保存</button>
    </div>
  </form>
</div>

HTML属性id、class命名

使用中划线(-)作为链接符,例:

html
<div id='order-content' class='order-content'>
  
</div>

HTML属性INPUT

html
// text
<{input type="text" }> 或 <input class="x-input" />
  
// select
<{input type="select" }> 或 <select class="x-select" />
  
// checkbox 需要label标签包裹,可实现选中文字勾选
<label><input type="checkbox" />点文字也可勾选哦</label>

字符串定义

PHP、XML、JS使用单引号作为字符串,HTML使用双引号作为字符串定义

php
# PHP
$str = '字符串';

# XML
<menu name='订单中心'></menu>

# HTML
<div id="id"></div>

# js
var str='字符串'

SQL定义

关键词大写

sql
$sql = 'SELECT * FROM sdb_ome_orders WHERE order_id=1;'

权限命名定义

使用{app}_{ctl}_{act}格式字段权限id,例:

xml
<desktop>
  <permissions>
    	<!-- 其中控制器的admin可以忽略 -->
      <permission id="dacenter_allocation_indexBrandOrder" >直销订单配货</permission>
  </permissions>
	<workground name="配货中心" id="dacenter_center" order="10600">
        <menugroup name="直销配货">
            <menu controller='admin_allocation' action='indexBrandOrder' >订单配货</menu>
        </menugroup>
	</workground>
</desktop>

全局变量调用

使用base_component_request获取$_POST $_GET $_REQUEST $_COOKIE global static等全局变量值,严禁直接调用赋值。