为何用 zin?
现实问题
PHP 是一种很强大的 Web 开发语言,但面对日益复杂的 Web 应用需求仍然有一些现实问题:
- HTML 和 PHP 代码参杂一起,不易于书写和阅读;
- 前端页面功能需求越来越复杂,不借助前端框架实现页面基本不可能,引入前端 UI 框架或第三方组件时需要手动引入依赖并手写大量初始化代码;
- 前后端调试不方便,例如不支持热更新等。
以上各种原因导致代码膨胀,后期难以维护。
什么是 zin?
zin(读为 ['zɪn]
)是一个 PHP UI 辅助库,使用 PHP 实现组件化 HTML 页面的全新方式。结合 ZentaoPHP 框架使用,可以代替传统的 view 页面实现。zin 允许你在后端通过声明式的方式来构建 HTML 页面,而无需手写 HTML5 代码,通过内置的丰富组件库,可以快速开发复杂的页面功能。
下面展示一个简单的 zin 页面源码和对应生成的 HTML 代码:
namespace zin;
set('title', '示例页面');
h1('Hello world!');
p('这是 zin 的示例页面!');
div
(
button('了解更多'),
html('<p>仍然支持添加复杂的 <strong>HTML</strong></p>')
);
render();
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="renderer" content="webkit">
<title>示例页面</title>
</head>
<body>
<h1>Hello world!</h1>
<p>这是 zin 的示例页面!</p>
<div>
<button type="button">了解更多</button>
<p>仍然支持添加复杂的 <strong>HTML</strong></p>
</div>
</body>
</html>
点击查看真实效果
可以看到相比较传统的 PHP 页面代码结构包含了 HTML 标签和 PHP 代码,zin 的页面代码结构则简单多了,只包含 PHP 代码。
zin 的理念
- 一切即部件(Widget,读为
[ˈwɪdʒɪt]
),用部件构建一切; - 数据(Data)和界面(View)分离,避免混乱;
- 声明式优先,必要时也允许采用命令形式,简单与灵活并存,开箱即用。
zin 的优势
流畅的编程体验
数据和 UI 实现分离,UI 实现通过部件声明式实现,更容易写出逻辑清晰易于阅读的代码。所有实现只需要调用 PHP 方法即可,无需手动书写 HTML。
丰富的内置部件
zin 内置部件库不仅涵盖所有 HTML5 元素,还包含了 ZUI3 组件,以及为禅道定制的组件。只需要少量代码即可构建一个完整功能的禅道页面。
自然的关注点分离
zin 负责了后端 HTML 输出过程,通过部件自然的将 HTML 结构和数据分离,每个部件可以负责一个前端功能,例如表单、表格、分页甚至 JS 库的调用等,部件之间可以嵌套,通过组合的方式来实现复杂的页面。这样在实现页面时,PHP 后端程序员只需要关注页面数据的处理以及对部件的运用,无需关注部件内部对应的前端功能实现以及前端依赖和调用方式等,前端程序员只需要关注前端交互的实现,无需关注业务数据的处理。
极简的核心概念
zin 中提供了大量快捷方法,但不要被表面吓到,实际上 zin 的核心概念只有“部件”,这些方法基本涵盖两方面功能:实例化部件和对部件进行配置。所以掌握 zin 的核心概念后即可快速上手。
可控的渲染流程
zin 在最终渲染输出 HTML 之前,所有页面结构都是可以修改的数据,所以可以完整控制整个渲染流畅,甚至加入一些钩子对页面进行定制。
强大的调试能力
zin 支持如下强大调试功能:
- 后端代码变化后,浏览器页面自动更新
- 检查和验证代码,并直接在浏览器给出友好的提示,帮助大家写出更好的代码
- 专门的浏览器开发者工具,在浏览器中直接查看部件结构和数据
还有更多功能将在后续计划中支持,详情关注 下一步计划。