Skip to content

为何用 zin?

现实问题

PHP 是一种很强大的 Web 开发语言,但面对日益复杂的 Web 应用需求仍然有一些现实问题:

  • HTML 和 PHP 代码参杂一起,不易于书写和阅读;
  • 前端页面功能需求越来越复杂,不借助前端框架实现页面基本不可能,引入前端 UI 框架或第三方组件时需要手动引入依赖并手写大量初始化代码;
  • 前后端调试不方便,例如不支持热更新等。

以上各种原因导致代码膨胀,后期难以维护。

什么是 zin?

zin(读为 ['zɪn])是一个 PHP UI 辅助库,使用 PHP 实现组件化 HTML 页面的全新方式。结合 ZentaoPHP 框架使用,可以代替传统的 view 页面实现。zin 允许你在后端通过声明式的方式来构建 HTML 页面,而无需手写 HTML5 代码,通过内置的丰富组件库,可以快速开发复杂的页面功能。

下面展示一个简单的 zin 页面源码和对应生成的 HTML 代码:

php
namespace zin;

set('title', '示例页面');
h1('Hello world!');
p('这是 zin 的示例页面!');
div
(
    button('了解更多'),
    html('<p>仍然支持添加复杂的 <strong>HTML</strong></p>')
);

render();
html
<!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 支持如下强大调试功能:

  • 后端代码变化后,浏览器页面自动更新
  • 检查和验证代码,并直接在浏览器给出友好的提示,帮助大家写出更好的代码
  • 专门的浏览器开发者工具,在浏览器中直接查看部件结构和数据

还有更多功能将在后续计划中支持,详情关注 下一步计划

https://zentao.net