常见问题(应用开发)
本篇汇总 Z-BlogPHP 应用开发中的注意事项与常见问题,包括开发模式、CSRF 验证、命名规范与打包排除等实践要点。
注意事项速查表
- 开发模式下不报错很重要:「启用开发模式」;
- 对于需要用户点链接或提交表单触发,进而对数据或文件产生影响的,除必要的用户权限验证外,应另外加入 CSRF Token 验证;「CSRF Token 验证」
- 自定义函数名、类名应以「应用 ID」开头或结尾,使用
_分隔,建议放在开头; - 自建表命名:
plugin_appID_表名或theme_appID_表名,表前缀由系统自动附加; - 自建模块命名:
plugin_appID_模块名或theme_appID_模块名,这样管理起来更方便; - 站内链接或路径须全部使用绝对地址:
- PHP:
$zbp->host、$zbp->path,也有专门的全局变量; - JS:
bloghost;
- PHP:
- 对于服务器端发起的网络请求,请优先使用自带的
Network;「Network 参考」 - 类似
.gitignore,可以使用zbignore.txt对不需要打包进zba的文件进行排除;「zbignore.txt 参考」 - 理论上,「你」并没有在应用中自带
jQuery必要; - 编辑器相关的插件要考虑通用性;
- 1.7 起,要求主题模板内的
HTML「应当在当前文件内闭合」;「不要跨文件闭合 HTML 标签」 - 在「公共头部」「公共尾部」模板内应各自放置
{$header}或{$footer}标签;「示例 - 主入口模板 - 主题开发」 - 尽量「定制」字体图标而不是引入一整套;
- 要考虑用户站点上可能并没有你写死的数据调用;
- 除版权标识及注释外,不要在模板内写死各种和你有强关联的东西;
- 主题内「Z-Blog 版权标识」最速调用:
Powered By {$zblogphphtml}; CSS和JavaScript应尽可能采取外部引用而不是写在HTML内,style=""属性同理;- 按新规范写代码:
- 比如放弃
var关键字,使用let或const; link:css、script:js弃用非必要属性;<link rel="stylesheet" href="style.css">;<script src="script.js"></script>;- VSCode 直接红色波浪线提示的过时写法;
- 比如放弃
- 正则中使用
.*?很不科学,请使用否定匹配,例如[^>]*或[^"]*;另外:'/abc/i'——i修饰符为忽略大小写;'/中文/u'——u修饰符用于匹配中文等;- 参考「[开发者]正则表达式相关专贴-开发者中心」
- 参考「PHP: 正则表达式模式中可用的模式修饰符 - php.net」
- logo,favicon,二维码等「替代性」文件不要走附件机制,尤其是不要捆绑编辑器上传;另外应利用
zbignore.txt防止更新时被覆盖;参考「配置图片上传」「zbignore.txt 参考」 - 前台「站内链接」默认当前页打开;
- 仅限「关于」「后台管理/登录」等少数情形可以例外;
- 在保存配置执行后,强烈建议用
$zbp->SetHint('good'); Redirect('./main.php');而不是$zbp->ShowHint('good');; - 有限度的使用 PHP 的
Herdoc语法拼接 HTML;「参考:PHP: String 字符串 - Manual」
程序员的自我修养
- 编辑器推荐「Visual Studio Code」「简体中文语言包」,其他编辑请确保有相应功能或插件;
- 重点推荐的插件及功能:
- PHP 代码补全及检查:「PHP Intelephense」;
- 字面意思:「Format HTML in PHP」;
- 代码风格规范:「EditorConfig for VS Code」——参考下方「附注 - EditorConfig」;
- 英文单词拼写检查:「Code Spell Checker」;
- 次要:
- 代码格式化:「Prettier - Code formatter」;
- 快速生成 PHP 注释:「PHP DocBlocker」;
- 替代默认的文件图标:「VSCode Great Icons」;
- 有个名词叫「代码片段」——「参考链接」;
- 单行注释的双斜线后请加一个空格——
// (╯﹏╰); - 给开发人员的 字体:「JetBrains Mono」;
附注 - EditorConfig
zb_users/theme、zb_users/plugin 各放一份,文件名:.editorconfig;
ini
# editorconfig.org
root = true
[*]
charset = utf-8
# 空格 或 tab 缩进
indent_style = space
# 缩进数量
indent_size = 2
# 换行符
end_of_line = lf
# 自动剔除行尾空格
trim_trailing_whitespace = true
# 文件结尾插入空行
insert_final_newline = true