1

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

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

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

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

PHP:

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

JS:

 {
     anArray : []
 }

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

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

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

所以我想要一个以 DRY 方式开发它的解决方案:如果我想添加一个名为“paginationEnabled”的字段,它应该同时出现在 JS 和 PHP 对象中:

PHP:

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

JS:

 {
     anArray : [],
     paginationEnabled : true
 }

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

4

1 回答 1

3

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

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

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

于 2012-06-08T20:07:26.983 回答