我需要构建一个复杂的控制面板。
必须由用户配置,在他进行了任意数量的更改后,他会提交这些更改并显示新配置的报告。
现在有很多可能的配置选项,JS必须能够使用值绘制控件元素/ init,并且PHP必须执行业务逻辑 - 所有这些都基于给定的配置对象 - 和在将对象传递给另一方之前,两者都必须能够更改选项的值。
现在显而易见的解决方案是在两端都有预定义的配置对象:
PHP:
class config {
public $anArray = array();
}
JS:
{
anArray : []
}
双方可以通过json_encode
和$.parseJSON
流畅地沟通。
但是,两个实体的结构必须匹配,我不知道如何确保这一点。有没有人想过如何在这两种技术之间传递复杂的数据结构?
编辑:澄清一下,按结构我的意思是两个对象的属性:对象本身是一个简单的配置包装器,所以它没有私有属性,没有方法等,只有公共字段是标量或简单的索引数组。
所以我想要一个以干燥的方式开发它的解决方案:如果我想添加一个名为“paginationEnabled”的字段,它应该出现在两者中 - JS和PHP对象:
PHP:
class config {
public $anArray = array();
public $paginationEnabled = true;
}
JS:
{
anArray : [],
paginationEnabled : true
}
我可以在双方分别实施它们,但它不会是DRY(在这种情况下这很糟糕)我可以感觉到必须有一个解决方案,我只是想不到一个。
答案 0 :(得分:3)
最简单的解决方案是在服务器的每个请求以及服务器返回的每个页面中包含整个JSON编码的对象结构。无论如何,这都是必要的,因为PHP和JavaScript都不会在页面加载之间持续存在(除非你使用的是AJAX,这只会使JavaScript保持不变)。
当然,只有在数据已经采用JSON编码的形式时才有效。 (数组和简单对象可以编码到任何深度,但不能编码为非平凡类,文件句柄或函数。)如果不是,则需要将其转换为1,然后在另一端转换回来 - 例如,如果对象的类很重要,那么首先需要确保另一侧存在相应的类,然后您可以使用{class: $class, value: $value}
指示所需的类名 - 并在另一端添加代码找到该构造并重建所需类的对象。如果需要复制函数,那么如果将所有函数存储为JavaScript,并且在PHP中包含JavaScript解释器库,那么这可能是可管理的。然而,这可能比它的价值更麻烦。
如果JSON对象太大而无法在每个请求上发送,那么您将把它存储在数据库中(以适合数据库的形式),并在JavaScript端发生更改时使用AJAX更新数据库,或检索客户端代码尚未拥有的对象的任何部分。