-
Notifications
You must be signed in to change notification settings - Fork 0
wydhit/PhalconAdmin
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
不同的子域名分配不同的项目 底下分若干有关系的子项目 如 admin www api 每个子项目启用不同的子域名 admin.a.com www.a.com api.a.com 每一个子项目可以是单模块 也可以是多模块 也可以多层控制器 除了共用基层方法和配置文件外 每个项目保持很大的独立性 每个子域名session不共用 ###关于配置 1、公共配置 /common/config 目录下 config.php //公共配置 所有子项目都有可能用到的 比如数据库配置 local.config.php //本地配置文件 使用git忽略,不提交版本库。 每个开发者需要自己临时配置配置信息时应该在这个文件修改 2、项目配置 项目/config 目录下 基本和公共配置一样 多了router.php 每个项目路由必定不一样单独路由文件 控制器分层需要这里配置下 modules.php 需要多模块这里配置模块 loader.php 自定加载器 ### 模块名 多层控制器目录 基本控制器名 不能重复 匹配url优先 模块名 其次 多层控制器目录 最后 基本控制器名 ###请求 1、ajax请求 get或者post 提交数据用post 返回json数据 请求html页面用get 返回html数据 2、普通web请求用 get 返回html数据 一般情况下禁止web post请求 ###交互信息处理 信息格式: { 'status':'sucess|error string', 'msg':'XXXXX string ', 'data':'前端需要的数据 array ', 'errinput':'字段错误提示信息 :array' 'goUrl':'下一步需要执行跳转的url:string', 'param':'其他参数' } 1、ajax请求 2、普通web请求 1.1 2处理方式 输出错误信息模板 公共方法 msg('err') 1.2 输出json 数据 sendJson(status) 不管哪里输出信息 都是应该结束当前业务 通过return 调用方式 可以终结当前业务 return $this->msg() return $this->sendJson() ###信息输出 ##解析模板输出 return $this->render();$this->actionRender(); 控制器分层需要指定控制名称 ##json数据输出 return $this->sendJson() 还有两个方便的封装方法 ###异常及错误日志 1、错误的处理 php7 致命错误转为异常 转为异常处理 其它错误: 开发环境 所有错误都转为异常 正式环境 错误不转为异常 不显示 但是记录错误 2、异常处理 程序终止执行 业务逻辑需要终止执行的时候也通过抛出异常处理 LogicException ###session 缓存 log session采用redis 键值:项目名:session:sessionId 如 admin:session:sessionId 不必要的缓存采用redis 键值: 项目名:cache:缓存id 如: admin:cache:缓存id 不必要的数据 储存在mongo或者文本文件 需要统计分析的mongo 偶尔需要查看的文本文件 ###日志: 异常及错误日志 操作日志 核心业务日志 log 储存在mongo或者文本文件 需要统计分析的mongo 偶尔需要查看的文本文件 #### 数据使用规范 一般数据储存在mysql 数据库共用 表名 字段名 全部小写用下划线分割 主键统一使用id 外键 表明_id 尽量不要允许NULL 布尔类型的值均以 is、has、exist 或者 can开头 固定长度的字符串用char不用varchar 常用规范 1、时间:int time:unix时间戳 start_time:开始时间 end_time 结束时间 create_time 数据创建时间 update_time 数据更新时间 delete_time 删除时间.... 2、状态之类的枚举 tinyint(1) status:状态 type:类型 用数字表示约定的几种状态 1:新建 2:更新 3:完成 (尽量不要使用0,必须写注释) 这类型的字段同时用常量些写进model中 const STATUS=[1=>'新建',2=>'更新',3=>'完成'] 3.title:标题 名称 name:姓名 content:内容 img:图片 pre_img 预览图 big_img 大图 small_img 小图 keywords:关键词 description:描述 remark,other:备注 list_order,cls:排序 pid:上级id ip:ip地址 4.isdel 是否删除 默认0代表正常数据 1代表已被删除 5.is_*** 是否可用等等 逻辑规范: 1、控制器中尽量避免直接操作模型 尽量通过Repository 或者 Search操作 2、仅仅是查找数据列表展示 不用orm 直接在 Repository 或者 Search $this->modelsManager->createBuilder()创建查询并返回array 3、涉及到插入 更新 删除数据的操作 尽量使用orm 需要连表数据或者连表操作时 使用模型关联, 一定不用join 4、Model::find Model::findFirst 尽可用于很简单的条件查询 不允许使用join 和 columns 需要使用这时俩一般应该用$this->modelsManager->createBuilder() 4、一个方法放在Repository还是Model 不使用orm的方法尽量不要放在model中 应放在Repository 或者 Search 使用orm 且内容不是很多的放在Model 5、Repository 或者 Search Repository 一般用于业务逻辑处理 如产生订单 处理支付 Search 一般用于获取列表形式的信息展示用 主要处理搜索条件 Repository::N() 或者 Search::N() 可以直接获取实例 内部通过容器实例化类 这俩都继承于Injectable 可以方便的获取容器里的服务 如 $this->db $this->modelsManager $this->session 数据层 $this->db db层面没有查询构造器 除了insert update delete有简单封装外查询需要手写select 基础方法 execute (执行insert update delete等不返回数据的操作) query (返回数据结果集 后续需要fetch 实际执行pdo结果集类中的fetchAll) 插入:insertAsDict insert 对execute等封装 修改:updateAsDict update 对execute等封装 删除:delete 对execute等封装 字段自增值 increment 对updateAsDict等封装 字段自减值 decrement 对updateAsDict等封装 fetchAll() 对query等封装(实际也是对pdo结果集的操作) fetchOne() 对query等封装(实际也是对pdo结果集的操作) 自行封装increment decrement decrementAboveZero 方法 PHQL PHQL依赖Model 实际是Model层的操作了 Query 最底层执行phql方法 new Query($PHQL)->execute();结果集合 new Query($PHQL)->getSingleResult()一条结果 执行结果 select查询 根据columns 给出 Complex 结果集或者 Simple 结果集 Complex Simple 只select不完整的字段 集合中每一个元素为Row 否则为完整的Model 对象 或者通过模型管理器 createQuery 方法获取Query 模型管理器仅提供new Query 后续还需要execute() 模型管理器也提供了 executeQuery 直接给出结果不需要execute() Query\\Builder Query的构造器 最终通过getQuery()获取自动生成的Query实例 Model层 Criteria是find()里的参数构造器 通过Model::query()获取 一般情况下不推荐使用Model::query() 这个效率要慢些 find() 实际还是用个模型管理器中 $this->modelsManager->createBuilder() 获取Query再去执行的 PHQL和Model::find 简单的查询条件使用 Model::find 一般用于查找一条数据并修改 复杂的使用PHQL
About
基于phalcon和ace的网站架构
Topics
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published