
TP5
jyl_sh
多年从事IT项目的开发和管理工作,主要从事过电力、电信、邮政、教育、金融等行业的IT系统的开发建设及项目管理工作
展开
-
symfony入门学习资料之十六:Symfony框架启动过程介绍
Symfony的启动过程想了解symfony的启动过程,必须从启动文件(这里就以开发者模式)开始。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?php /* * web/app_dev.php ...原创 2020-12-04 22:01:15 · 1501 阅读 · 0 评论 -
EDUSOHO踩坑笔记之五十三:Undefined offset故障排除
EDUSOHO踩坑笔记之五十三:Undefined offset故障排除 今天在跟踪EDUSOHO的程序时,发现下面的错误,导致服务器的数据库访问负荷飙高,以为是收到攻击了,后来排查下来发现不是,是因为一个访问边界没控制住,数组越界导致提取数据失败,不断重试导致的数据库访问飙高,像被攻击了一样。[06-Nov-2020 09:04:03 Asia/Shanghai] PHP Notice: Undefined offset: -1314340 in /mydat...原创 2020-11-06 14:02:57 · 2612 阅读 · 0 评论 -
symfony入门学习资料之十五:twig模板中的全局变量实现办法
symfony入门学习资料之十五:twig模板中的全局变量实现办法 一个网站总有一些网站名等之类的公用信息,这些公用信息体现在它是网站配置信息变量,这一些信息在网站是公用的,所以在TP开发中我们做一引父类的Controller,在其_initialize中实现配置的读取。 在symfony中,要达到此类结果,用服务注入进行解决。在MobileBundle中新建一个Service 创建<?phpnamespace Moblie\MobleBundle\Ser...原创 2020-06-14 16:54:32 · 1313 阅读 · 0 评论 -
symfony入门学习资料之十四:symfony框架Twig模板的渲染
symfony入门学习资料之十四:symfony框架Twig模板的渲染 用于渲染的元数据是$ this-> renderView,它希望将文件引用为bundle:controller:file.html.twig,从不同角度实现渲染。一、从控制器$ template = $ this-> get('twig') - > createTemplate('Hello {{name}}');$ template-> render(array('name'=>'...原创 2020-06-14 16:44:05 · 1129 阅读 · 0 评论 -
symfony入门学习资料之十三:symfony框架Twig模板语言的使用
symfony入门学习资料之十三:symfony框架Twig模板语言的使用php的Twig模板语言:类似python的jinja2,语法什么的都是类似python一、模板继承模板路径:app/Resources/views/母版:base.html.twig<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8"> <meta http-e...原创 2020-06-14 16:16:34 · 1065 阅读 · 0 评论 -
symfony入门学习资料之十二:Twig模板Extension(在模板中使用json_decode)
symfony入门学习资料之十二:Twig模板Extension(在模板中使用json_decode)采用twig技术,对其进行扩展是非常方便和容易的.第一步:通过创建类可以自然而然的进行扩展。<?phpnamespace Acme\DemoBundle\Twig\Extension;use Symfony\Component\DependencyInjection\ContainerInterface;use \Twig_Extension;class VarsExten..原创 2020-06-14 14:10:16 · 1228 阅读 · 0 评论 -
symfony入门学习资料之十一:Twig模板
symfony入门学习资料之十一:Twig模板 在Symfony中使用样板预设有Twig与PHP两个选择,在不同的函式库当然可以做不同的选择,这要感谢Symfony从symfony2开始使用了Dependency Injection Container,并且充分利用使用Twig技术下面的优势: Twig 非常快,Twig 样板会编译成PHP ,所以使用Twig 样板不会造成太大的系统运行负担。 Twig 非常简洁, Twig 可以透过少量程式码执行样板功能, 可以规避PHP...原创 2020-06-14 13:02:39 · 1598 阅读 · 0 评论 -
symfony入门学习资料之十:YAML——基本语法
symfony入门学习资料之十:YAML——基本语法 本节的学习,继续介绍YAML的语法,进一步深入的学习。在symfony框架中,yml格式的文件用的非常普遍,所以在本系列的学习中,要多花些篇幅进行介绍。一、基本功能 YAML的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。 它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近...原创 2020-06-14 10:28:53 · 1300 阅读 · 0 评论 -
symfony入门学习资料之九:YAML格式介绍
symfony入门学习资料之八:YAML格式介绍 由于EDUSOHO的项目原因,中断了对symfony框架的继续学习,今天回顾了前面的总结,总结了八节。从建立简单的页面、控制器、路由、模板等,甚至包括前面的安装等介绍一系列文章。结合中间插入的edusoho等系列文章的研究,认为学习symfony的框架,还需要细化学习yaml格式和twig的格式文件。这一节开始介绍yaml格式。 YAML(发音 /ˈjæməl/ )是一种专门用户描述数据的简单语言,支持复杂的可嵌套的数据结构。...原创 2020-06-14 09:11:15 · 1287 阅读 · 0 评论 -
EDUSOHO踩坑笔记之五十二:开发参考资料
EDUSOHO踩坑笔记之五十二:开发参考资料前端EduSoho 需要具备一定的 HTML、CSS、JavaScript、jQuery、Bootstrap、Less 等前端知识,以下教程及书籍可供学习:W3school HTML 教程 W3school CSS 教程 JavaScript全栈教程:初学者可跳过教程中的 Node.js 及以下章节的内容。 Head First HTML与CSS(第2版) Head First JavaScript程序设计 Head First jQuery原创 2020-06-11 08:36:04 · 1144 阅读 · 0 评论 -
EDUSOHO踩坑笔记之五十一:常见问题解答
常见问题解答如何开启开发模式?系统在开发模式下,会显示调试信息,已经在页面底部会出现开发者工具栏,方便在开发过程中调试排除错误。可以通过如下方式开始:修改 EduSoho 的 Nginx 配置,将所有的app.php修改为app_dev.php; 重启 Nginx。sudo service nginx restart # Ubuntu sudo brew services restart nginx # macOS警告请勿在生产环境开启开发模式,否则将严重影响系统性能...原创 2020-06-11 08:35:44 · 1456 阅读 · 0 评论 -
EDUSOHO踩坑笔记之四十一:公告
EDUSOHO踩坑笔记之四十一:公告获取公告列表GET /announcements权限不需要认证参数字段 是否必填 描述 startTimetimestamp 否 起始时间(默认0,即全部) offsetint string 否 分页偏移值, 默认0 limitint string 否 每一页数量, 默认10 响应成功响应pagelist<announcement>结构体...原创 2020-06-10 09:03:49 · 905 阅读 · 0 评论 -
EDUSOHO踩坑笔记之五十:EduSoho 8.0 升级指南
EDUSOHO踩坑笔记之五十一:EduSoho 8.0 升级指南系统初始化命令改动app/console topxia:init # 7.0 系列 app/console system:init # 8.0 系列Migration在7.0版本包括之前的版本中,数据库migration脚本文件的创建和执行是用doctrinegenerate和doctrinemigrate这两个命令。在8.0中数据库脚本文件创建和执行命令是使用bin/phpmig目录下的去执行。Examp...原创 2020-06-10 09:07:23 · 1370 阅读 · 0 评论 -
EDUSOHO踩坑笔记之四十九:安全
安全◆ R1:禁止未过滤的变量拼接 SQL,请使用变量绑定替代。ORDER BY的字段、以及分页参数$start、$limit也需要过滤。防止 SQL 注入攻击。注意SQL 注入会导致数据库被拖库、数据被破坏、信息泄露等严重的安全问题,属于 Web 开发安全中,破坏性最大的安全问题。继承自GeneralDaoImpl的 Dao,可以通过sql($sql, $orderBys=null, $start=null, $limit=null)来组装 OrderBy 以及分页参数。例:...原创 2020-06-10 09:07:01 · 1152 阅读 · 0 评论 -
EDUSOHO踩坑笔记之四十八:EDU数据库MySQL 开发规范
EDUSOHO踩坑笔记之四十九:EDU数据库MySQL 开发规范MySQL 开发规范 命名规范 表字段设计规范 索引 SQL 参考文献 MySQL 开发规范命名规范库名、表名、字段名必须使用小写字母,并采用下划线分割。 库名、表名、字段名禁止超过32个字符。 库名、表名、字段名见名知意,使用名词而不是动词。 库名、表名、字段名,使用常见单词,避免使用长单词和生僻词。 表名、字段名应当有注释,描述该表、字段的用途。 表名不使用复数名词。表字段设计规范使用In原创 2020-06-10 09:06:45 · 1253 阅读 · 0 评论 -
EDUSOHO踩坑笔记之四十七:API 开发文档
EDUSOHO踩坑笔记之四十八:API 开发文档介绍 路由 注解 异常 API扩展 测试 最佳实践TODO多版本控制 OAuth 2.0认证RFC6749 没有认证的话,接口不能翻页 app 请求日志调优 n+1查询问题排查 token过期的解决方案 新的Resource寻址解决方案 将API重构成框架,参考silex 重构oauth2 bundle,去掉ORM api session 解决方案,session统一介绍ESAPI遵循REST的最佳实践开...原创 2020-06-10 09:06:27 · 1679 阅读 · 1 评论 -
EDUSOHO踩坑笔记之四十六:REST API 更新日志
EDUSOHO踩坑笔记之四十七:REST API 更新日志[8.2.23-beta]增加接口增加用户VIP信息(修复)/api/me 会员设置/api/settings/vip 课程接口(修改)/api/courses 会员教学计划接口/api/plugins/vip/vip_courses 会员课程CourseSet接口/api/plugins/vip/vip_course_sets 会员用户接口/api/plugins/vip/vip_users/{userId} 订单信息接口兼原创 2020-06-10 09:05:59 · 1023 阅读 · 0 评论 -
EDUSOHO踩坑笔记之四十五:用户积分
EDUSOHO踩坑笔记之四十六:用户积分我的积分GET /plugins/reward_point/me/reward_point权限需要认证响应成功响应字段 描述 userIdint string 用户ID balancestring 计划名称 titleint string 积分称谓 如果积分未开启,返回空对象。如果积分开启, 访问某些 API, 比如创建课程话题, 这些 API 的 Response 里的 HEADER 里...原创 2020-06-10 09:05:33 · 937 阅读 · 0 评论 -
EDUSOHO踩坑笔记之四十四:打折活动
EDUSOHO踩坑笔记之四十五:打折活动获取单个打折活动信息GET /plugins/discount/discounts/{discountId}权限不需要认证用户响应成功响应Discount结构体字段 描述 idint string ID namestring 名称 typeenum{discount,free,global} 类型(discount:限时打折, free:限时免费, global:全站打折) start...原创 2020-06-10 09:05:06 · 914 阅读 · 0 评论 -
EDUSOHO踩坑笔记之四十三:会员
EDUSOHO踩坑笔记之四十三:会员会员等级获取单个会员等级信息GET /plugins/vip/vip_levels/{levelId}权限不需要认证用户响应成功响应VipLevel结构体字段 描述 idint string ID seqint string 顺序 namestring 名称 iconstring 图标 monthPricefloat string 每月的价格 monthPriceC...原创 2020-06-10 09:04:49 · 1120 阅读 · 0 评论 -
EDUSOHO踩坑笔记之四十二:资讯
EDUSOHO踩坑笔记之四十二:资讯获取资讯列表信息GET /articles/{id}权限老API,需要认证参数字段 是否必填 描述 sortstring 否 排序,'created','updated','published'(先置顶倒序后发布时间倒序),'normal'(发布时间倒序),'popular'(点击量倒序) startint string 否 分页偏移值, 默认0 limitint string 否 ...原创 2020-06-10 09:04:12 · 981 阅读 · 0 评论 -
EDUSOHO踩坑笔记之四十:通知
EDUSOHO踩坑笔记之四十:通知获取通知列表GET /notifications权限需要认证参数字段 是否必填 描述 typeenum{course,friend} 否 通知类型(默认course) startTimetimestamp 否 起始时间(默认0,即全部) offsetint string 否 分页偏移值, 默认0 limitint string 否 每一页数量, 默认10 响应...原创 2020-06-09 10:16:41 · 874 阅读 · 0 评论 -
EDUSOHO踩坑笔记之三十九:验证码
EDUSOHO踩坑笔记之三十九:验证码图形验证码获取图形验证码POST /captcha响应字段 描述 captchaTokenstring 验证码的令牌 imagestring 图片base64 验证图形验证码GET /captcha/{captchaToken}参数字段 是否必填 描述 phrasestring 是 待验证的字符串 响应字段 描述 statusstring...原创 2020-06-09 10:14:51 · 2123 阅读 · 0 评论 -
EDUSOHO踩坑笔记之三十八:网站后台设置
EDUSOHO踩坑笔记之三十八:网站后台设置查看网站某个功能的设置GET /settings/{type}权限不需要认证用户参数字段 描述 typestring 类型 register:注册设置payment:支付设置vip:会员~设置 响应register字段 描述 modestring 注册模式 closed:注册已关闭 email:邮箱注册 email_verify:邮箱验证注册 mobile:手机注册 email_mobi...原创 2020-06-09 10:12:32 · 1157 阅读 · 0 评论 -
EDUSOHO踩坑笔记之三十七:移动端API
EDUSOHO踩坑笔记之三十七:移动端API获取移动端频道GET /app/channels响应成功响应list<AppChannel>字段 描述 titlestring 标题 typeenum{course,live,classroom} 频道类型 showCountint string 需要展示的数量 actualCountint string 实际可展示的数量 orderTypestring 排序...原创 2020-06-09 10:10:18 · 992 阅读 · 0 评论 -
EDUSOHO踩坑笔记之三十六:优惠码
EDUSOHO踩坑笔记之三十六:优惠码获取当前用户的优惠码GET /me/coupons权限需要响应成功响应list<Coupon>结构体字段 描述 idint string ID codestring 优惠编码 typeenum{minus,discount} 优惠方式,minus:抵扣 discount:打折 statusenum{unused,used,receive} 状态 rateint s...原创 2020-06-09 10:06:12 · 875 阅读 · 0 评论 -
EDUSOHO踩坑笔记之三十五:订单
EDUSOHO踩坑笔记之三十五:订单订单业务错误码统一前缀为:20确认订单信息POST /order_info权限需要认证用户参数字段 是否必填 描述 targetTypeenum{course,classroom} 是 商品类型 targetIdint string 是 商品ID unitstring 否 购买方式,year,month numint string 否 购买数量 响应...原创 2020-06-09 10:03:41 · 1088 阅读 · 0 评论 -
EDUSOHO踩坑笔记之三十三:班级
EDUSOHO踩坑笔记之三十三:班级班级 班级 获取班级信息 获取班级列表 班级成员 获取班级计划 加入班级 营销平台加入班级 班级班级获取班级信息GET /classrooms/{classroomId}权限不需要认证 普通用户可以获得public状态的班级 管理员用户可以获得任何状态的班级 [TODO]响应成功响应Classroom结构体字段 描述 idint string ID tit..原创 2020-06-09 09:51:04 · 972 阅读 · 0 评论 -
EDUSOHO踩坑笔记之三十二:课程
EDUSOHO踩坑笔记之三十二:课程获取课程信息GET /course_sets/{id}权限不需要认证 普通用户可以获得published状态的课程 [TODO] 管理员用户可以获得任何状态的课程 [TODO]响应成功响应CourseSet结构体字段 描述 idint string 课程ID titlestring 标题 subtitlestring 副标题 typeenum{normal,live,liveOpen,o...原创 2020-06-09 09:42:36 · 1527 阅读 · 0 评论 -
EDUSOHO踩坑笔记之三十一:分类
EDUSOHO踩坑笔记之三十一:分类获取分类树GET /categories/{groupCode:course,classroom}权限不认证用户响应成功响应Tree<Category>结构体字段 描述 idint string 成员ID codestring 分类的code namestring 分类名字 descriptionstring 描述信息 weightdatetime 权重,用于排序...原创 2020-06-09 09:42:08 · 835 阅读 · 0 评论 -
EDUSOHO踩坑笔记之三十:批量请求
EDUSOHO踩坑笔记之三十:用户当前用户GET /me权限需要认证响应成功响应AuthenticatedUser结构体AuthenticatedUser结构体字段 描述 idint string 用户ID nicknamestring 昵称 avatarPicture 头像 genderstring 性别 iamstring citystring 所在城市 qqstring ...原创 2020-06-08 13:03:13 · 934 阅读 · 0 评论 -
EDUSOHO踩坑笔记之二十九:批量请求
EDUSOHO踩坑笔记之二十八:批量请求简单批量请求请求curl \ -X 'POST' -H 'X-AUTH-TOKEN=...' \ -H 'Accept=application/vnd.edusoho.v2+json' \ -F 'batch=[{"method":"GET", "relative_url":"/course_sets"},{"method":"GET", "relative_url":"/courses?limit=50"}]' \原创 2020-06-08 12:58:43 · 915 阅读 · 0 评论 -
EDUSOHO踩坑笔记之二十八:认证与授权
EDUSOHO踩坑笔记之二十八:认证与授权认证方式Basic Authenticationcurl -X POST -H "Accept:application/vnd.edusoho.v2+json" -H "Authorization: Basic dGVzdDJlZHVvc2hvOjEyMzQ1Ng==" http://demo.edusoho.com/api/tokensX-Auth-Tokencurl-X POST -H "Accept:application/vnd.e原创 2020-06-08 12:55:23 · 1651 阅读 · 0 评论 -
EDUSOHO踩坑笔记之二十七:REST API
REST API版本控制 新API路由和老API路由都是相同的路由前缀。如果在header里增加Accept参数,值为application/vnd.edusoho.v2+json,将会访问新接口。如果不加,默认访问老接口。排序 一些接口提供对结果排序,在请求URL上使用sort参数即可,这个参数使用逗号分隔多个排序字段,默认排序是按照创建时间倒序field表示按照field字段正排-field表示按照field字段倒排比如说,要获取学员最多,并且点击量最多的课程:...原创 2020-06-08 12:47:58 · 1144 阅读 · 0 评论 -
EDUSOHO踩坑笔记之二十六:配置服务
EDUSOHO踩坑笔记之二十六:配置服务配置服务(SettingService)用于存取系统的配置项。注册$biz->regisger(\Codeages\Biz\Framework\Provider\SettingServiceProvider());注册后需要执行 Migration 创建数据库表:vendor/bin/phpmig migrate使用获得服务$settingService = $biz->service('Setting:Setti原创 2020-06-08 12:37:36 · 1152 阅读 · 0 评论 -
EDUSOHO踩坑笔记之二十五:定时任务调度系统Scheduler
EDUSOHO踩坑笔记之二十五:定时任务调度系统SchedulerScheduler即定时任务调度系统,也叫计划任务,可以通过该组件实现预设某个时间执行自定义的任务(以下简称job)。特性可以设置job的来源信息 job有优先级,在可执行的任务中,任务按优先级执行 job的触发时间 轮询,每个一个时间段执行一次 定时,设定在某个时间点执行 可以设置同一时刻最大执行job数设置 misfire机制。如果job错过了理论上应该执行的时间,并且错过的时间超过了设定的值,可以设置放弃执原创 2020-06-08 12:34:52 · 1430 阅读 · 1 评论 -
EDUSOHO踩坑笔记之二十四:缓存Redis
EDUSOHO踩坑笔记之二十四:缓存Redis Reids 即可当做数据库使用,也可当做缓存使用。启用 Redis 服务,需安装PHPRedis 扩展。框架集成了 Redis 服务,可通过以下方式启用:$biz->register(new Biz\Frameowrk\Provider\RedisServiceProvider(), array( 'redis.options' => array( 'host' => '127.0.0.1:6379',..原创 2020-06-08 12:30:03 · 1101 阅读 · 0 评论 -
EDUSOHO踩坑笔记之二十三:数据库DAO
EDUSOHO踩坑笔记之二十三:数据库DAO DAO(Data Access Object) 即数据访问对象,封装所有对数据源进行操作的 API。以数据库驱动的应用程序为例,通常数据库中的一张表,对应的会有一个 Dao 类去操作这个数据库表。通用的DAO基类 框架中定义了基础 DAO 接口GeneralDaoInterface,以及对应的实现:GeneralDaoImpl。GeneralDaoInterface接口如下,定义了常用的增删改查的数据操作方法。<?p...原创 2020-06-08 12:24:35 · 1310 阅读 · 0 评论 -
EDUSOHO踩坑笔记之二十二:数据库变更脚本(Migration)
EDUSOHO踩坑笔记之二十二:数据库变更脚本(Migration) Biz Framework 使用phpmig作为数据库变更脚本的引擎,并约定项目根目录下的migrations目录为默认的 migration 脚本所在目录。基本使用查看所有命令:php bin/phpmig生成一个Migration脚本类:bin/phpmig generate YourClassName参数YourClassName为本次 Migration 脚本类的类名,请根据实际...原创 2020-06-08 12:19:07 · 1211 阅读 · 0 评论 -
EDUSOHO踩坑笔记之二十一:Biz Framework概述
EDUSOHO踩坑笔记之二十一:Biz Framework概述概述 集成 开发示例 目录结构 命名约定 创建数据库 编写Dao 编写Service 使用Service 概述BizFramework 定位为简单、易用的业务层框架,采用经典的 Service/Dao 模式来编写项目的业务逻辑,可以跟 Symfony、Laravel、Silex、Lumen、Phalcon 等框架搭配使用。那么已经有了 Symfony、Laravel 这样流行的框架,原创 2020-06-08 12:12:06 · 1722 阅读 · 0 评论