1、PHP开发规范说明1目的2代码规范要求3程序设计原则3.1Model层所有与数据库表本身操作方法,都封装在自己的Model类中,不单独在外提供封装。每个Model基于ThinkPHP都已经封装好了一套DB操作方法。3.1.1基类3.1.1.1ModelThinkPHP原生Model基类。不能修改。在基于单表的数据CURD操作,使用Model原生成的功能。如:3.1.1.1.1Insert$role_user_model-add(array(role_id = $role_id, user_id = $uid, oem_code = parent:oem_code();3.1.1.1.2Upda
2、teif (IS_POST) $_POSTid = get_current_admin_id(); $_POSToem_code = parent:oem_code(); $create_result = $this-users_model-field(user_login,user_email,last_login_ip,last_login_time,create_time,user_activation_key,user_status,role_id,score,user_type,oem_code, true)/排除相关字段 -create(); if ($create_result)
3、 if ($this-users_model-save() != false) $this-success(保存成功!); else $this-error(保存失败!); else $this-error($this-users_model-getError(); 3.1.1.1.3Delete$id = intval(I(get.id);if ($this-users_model-where(id=$id)-delete() != false) M(RoleUser)-where(array(user_id = $id, oem_code = parent:oem_code()-delet
4、e(); $this-success(删除成功!); else $this-error(删除失败!);3.1.1.1.4Where$id = get_current_admin_id();$user = $this-users_model-where(array(id = $id, oem_code = parent:oem_code()-find();3.1.1.1.5PageThinkPHP已经实现好了分页栏位计算方法。HTML中$page_barPHP中$count = $this-users_model-where($condition_user)-count();$page = $t
5、his-page($count, 20);$users = $this-users_model -where($condition_user)/ 加了过滤 -order(create_time DESC) -limit($page-firstRow . , . $page-listRows) -select();$this-assign(page_bar, $page-show(Admin); / Admin 是模板名称,默认可以不填$this-assign(users, $users);3.1.1.2CommonModel: Model通用Model。构造时会所用默认的数据库连接。3.1.1
6、.3OemModel: CommonModel: Model针对不同OEM需要访问自己的DB时所使用的Model。重写了构造函数,初始化时会使用OEM定义好的数据库连接信息。3.1.2通用设置3.1.2.1自动后台验证/自动验证protected $_validate = array( /array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间) array(name, require, 用户名称不能为空!, 1, regex, ComentsModel: MODEL_INSERT ),);3.1.2.2默认值设定protected $_auto = array( array(c
7、reate_time,time,1,function), array(update_time,time,2,function),);3.1.3通用方法目前Model中可以通用的方法都写在CommonModel中。个人尽量不要在些文件中定义自己的函数,如果确认有的方法很常用、很通用,提交项目组进行讨论并确认后,方可写入CommonModel文件中。ThinkPHP提供了的原生数据库表操作功能,非常基础的Table操作可以直接写在上层代码中,如Controller中可以直接进行调用。原生的快速数据库操作方法:3.1.3.1Select top 10 * from Table where condi
8、tion$list = $this-where($condition)-limit(10)-select();3.1.3.2Select a as aa, b, c from table where condition$list = $this -where($arrayCondition) -field(array(“a”=”aa”, “b”, “c”) -select();return $list;3.1.3.3Insert table (a, b, c) values (a, b, c)普通做法:$datacreate_time = date(Y-m-d H:i:s, time();$d
9、atacode = uniqid();$result = $this-add($data);使用ThinkPHP直接从POST中将Form数据存库方法:if (IS_POST) $_POSToem_code = 100; if ($this-menu_model-create() if ($this-menu_model-save() != false) 3.1.3.4Update table set a = a where id = id$dataid = 100;$dataupdate_time = date(Y-m-d H:i:s, time();$result = $this-save
10、($data);3.1.3.5Delete table where id = id$result = $this-where(id=$id)-delete();目前可以使用的自定义方法如下:3.1.4自定义方法所有与自身表数据有关的操作,各自封装在自己的Model文件中。命名规则:(.)getRegisterUser(.);setUserAgeById($id, $age);getUsersByCondiation($condition);deleteUserByCompanyAndStatus($company, $status);3.2Business Logic层没想好放在哪个目录下3.
11、2.1命名规则3.2.1.1类名按业务场景起名如:AlarmLogicPurchaseLogicCrmLogicNotificateLogic3.2.1.2方法命名规则动词+名词如:moveAlarmToOtherUser($alarmid, $userid);copyNotificationToCompany($notificateid, $companyid);deleteExpireUserByCompanyPolicy($companyid);3.3Common Function层路径:Application/Common/Common/Function.php下。全局功能性的函数,或
12、者全局通用的方法都写在这里。目前定义的函数如下3.3.1iot_oem_code()取当前用户所属的oem_code。3.4Session的使用3.4.1$_SESSION“user”4表单处理4.1列表页面4.1.1文件名定义indexlisthomesearch4.2添加页面4.2.1文件名定义addcreate4.2.2后台Action名add_postcreate_postfunction add_post() if (IS_POST) $_POSToem_code = parent:oem_code(); if (!empty($_POSTrole_id) & is_array($_
13、POSTrole_id) $role_ids = $_POSTrole_id; unset($_POSTrole_id); if ($this-users_model-create() / 从表单中直接实例化变量 / 创建一个新用户 $result = $this-users_model-add(); / 保存数据库 if ($result != false) / 为这个新用户创建角色 $role_user_model = M(RoleUser); foreach ($role_ids as $role_id) $role_user_model-add(array(role_id = $rol
14、e_id, user_id = $result, oem_code = parent:oem_code(); $this-success(添加成功!, U(user/index); else $this-error(添加失败!); else $this-error($this-users_model-getError(); else $this-error(请为此用户指定角色!); 4.3编辑页面4.3.1文件名定义edit4.3.2后台Action名edit_post4.4内容页面4.4.1文件名定义DetailInfo4.5删除4.5.1后台Action名delete4.6表单数据读取4.
15、6.1I(“get.”)4.6.2I(“post.”)4.6.3$_GET“”4.6.4$_POST“”4.6.5$_GET + $_POST$GETPOST = array_meager($_GET, $_POST);5常用功能5.1数据库操作5.1.1转换成Model5.1.1.1D(“Common/ModelName”)5.1.1.2M(“ModelName”)5.2JSON5.2.1String-JSON5.2.1.1json_decode将string按json解析成array对象:$cmf_settings = “”, true)5.2.2object- string(JSON)以
16、Json格式(0)对$object进行序列化,序列化100个层级关系:$json_string = $object, 0, 100);简化写法:$json_string = $object);5.2.3读写配置文件ThinkPHP默认的配置文件在App/Common/Conf/Config.php文件中进行定义。5.2.3.1读$config = C(“配置项目名称”);5.2.3.2写C(“配置项”) = $config;5.3数组操作5.3.1array_merge($arrayA, $arrayB)5.4MVC5.4.1$this - display(:search)5.4.2$this
17、 - assign(keyword, $k)6程序设计文档6.1CompanyEquipment6.1.1Model6.1.1.1getCompanyKeyValue ($condition=null)返回可以使用的Company,字段是key, value,代表code,name。主要用于html中的dropdown控件使用返回值:array (size=4) SuJWlBoFkr = string 上海维沃重工机械有限公司 (length=36) K5QIohn6L7 = string 没有测试 (length=12) OEM_000001 = string 泰安华鲁锻压机床有限公司 (l
18、ength=36) TREYUTYTRE = string 鞍山宝马钢材物流中心销售有限公司 (length=48)PHP中用法:$company_kv_store = $this-company_model-getCompanyKeyValue (array(oem_code = iot_oem_code();$this-assign(company_kv_store, $company_kv_store);HTML中用法: 请选择公司 $company_kv_store$key $company_kv_store$key 7部署的程序说明7.1鞍山项目服务器:123.57.157.144软
19、件:WebAccess、MySQL、DotNet7.1.1程序启动7.1.1.1MySQL数据库7.1.1.2WebAccess7.1.1.3Grape.Ant服务C:CTCServicesGrapeGrape.AntGet:Delete:Server Response: 7.2云中控平台7.2.1配置新OEM在Aliyun的RDS中创建OEM数据库iot_oem_dev。在云中控平台中,使用Platform_admin帐号,创建OEM,配置Config中相关数据库连接信息。Platform_code表中增加对应OEM的计算器。在云中控平台中,创建一个该OEM下的管理员。在RabbitMQ中配置对应OEM的消息队列。在RabbitMQ中,配置对应的Exchange参数。配置223服务器上中服务,每个OEM有4个批处理文件,修改这四个批处理文件的参数为OEM的Codee。修改_start.bat文件,加上新增的OEM批处理文件,并启动此批处理文件。7.2.2程序启动统一启动,请在 D:CTCBackgroupd_Servicesmain 下运行 _start.bat。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1