JS和PHP复杂数据之间的桥梁


Bridge between JS and PHP complex data

我需要构建一个复杂的控制面板。

它必须是用户配置的,在他进行了任意数量的更改后,他提交这些更改并显示新配置的报告。

现在有很多可能的配置选项,JS必须能够绘制控制元素/用值初始化它们,PHP必须执行业务逻辑 - 所有这些都基于给定的配置对象 - 并且两者都必须能够在将对象传递给另一端之前更改选项的值。

现在显而易见的解决方案是在两端都有预定义的配置对象:

.PHP:

 class config {
     public $anArray = array();
 }

.JS:

 {
     anArray : []
 }

双方可以通过json_encode$.parseJSON进行流利的交流。

但是,两个实体的结构必须匹配,我不知道如何确保这一点。有没有人对如何在这两种技术之间传达复杂的数据结构有任何想法?

编辑:澄清一下,我所说的结构是指两个对象的属性:对象本身是一个简单的配置包装器,因此它没有私有属性,没有方法等,只有标量或简单索引数组的公共字段。

所以我想要一个以 DRY 方式开发它的解决方案:如果我想添加一个称为"分页启用"的字段,它应该同时出现在 - JS 和 PHP 对象中:

.PHP:

 class config {
     public $anArray = array();
     public $paginationEnabled = true;
 }

.JS:

 {
     anArray : [],
     paginationEnabled : true
 }

我可以在双方分别实现它们,但它不会是 DRY(在这种情况下很糟糕),我可以感觉到必须有一个解决方案,我想不出一个。

最简单的解决方案是在对服务器的每个请求以及服务器返回的每个页面中包括整个 JSON 编码的对象结构。 无论如何,这是必要的,因为PHP和JavaScript都不会在页面加载之间持续存在(除非你使用的是AJAX,这只会使JavaScript持久化)。

当然,这只有在数据已经采用可以 JSON 编码的形式时才有效。(数组和简单对象可以编码到任何深度,但不能编码为非平凡类、文件句柄或函数的对象。如果不是,那么你需要把它转换成一个,然后在另一端转换回来——例如,如果一个对象的类很重要,那么你首先需要确保另一端存在一个对应的类,然后你可以用{class: $class, value: $value}指示所需的类名——并在另一端添加代码以找到该构造并重建所需类的对象。如果你需要复制函数,那么如果你将所有函数存储为 JavaScript,并在 PHP 中包含一个 JavaScript 解释器库,这可能是可以管理的。 然而,这可能比它的价值更麻烦。

如果 JSON 对象太大而无法在每个请求上发送,那么您只能将其存储在数据库中(以适合数据库的形式),并在 JavaScript 端发生更改时使用 AJAX 更新数据库,或者检索客户端代码尚未具有的对象的任何部分。