Php 如何使用大量查询参数管理URL?
您如何管理应用程序中的大URL(带有许多查询参数)?Php 如何使用大量查询参数管理URL?,php,design-patterns,url,get,param,Php,Design Patterns,Url,Get,Param,您如何管理应用程序中的大URL(带有许多查询参数)? 例如,查看易趣上的此链接(不要单击此链接只是大URL的一个示例): 您可以看到许多参数,其中许多参数都有奇怪的短名称,如“\u f”、“\u sc”等 您不能在应用程序中使用这些参数,您需要转换为更“可读”的参数: 但是,最后会有很多变量,并且可能需要在一个函数中使用所有变量,因此,我们可以使用数组,而不是为每个查询参数使用一个新的变量: $readableParams['readableName'] = $_GET['_f']; 但
例如,查看易趣上的此链接(不要单击此链接只是大URL的一个示例): 您可以看到许多参数,其中许多参数都有奇怪的短名称,如“\u f”、“\u sc”等 您不能在应用程序中使用这些参数,您需要转换为更“可读”的参数: 但是,最后会有很多变量,并且可能需要在一个函数中使用所有变量,因此,我们可以使用数组,而不是为每个查询参数使用一个新的变量:
$readableParams['readableName'] = $_GET['_f'];
但是我们以一个具有任意结构的大数组结束,所以我认为最好的办法是为这些参数设置一个VO(DTO),比如:
$filterVo = new FilterVo();
$filterVo->readableName = $_GET['_f'];
没关系,但我们把代码放在哪里了?我的意思是,从“稀有查询参数”转换为“清除值对象”的最佳位置在哪里?因为我们还需要反向过程,所以我们可以创建一个包含数据的VO,然后从该VO生成一个包含正确查询参数的URL 在VO里面? 帮助器URL类? 查看模型基类
如何使用大量参数管理这些URL?这些参数大部分是自动生成的。我在很多ASP.NET应用程序中都见过这种行为。我讨厌.NET做这样的事情,但我不想再开始那个话题了 大多数情况下,这些附加参数是由插入模块生成的。它们以自动化的方式工作,完成一些没有直接反映在应用程序中的事情(至少是应用程序开发人员正在编写的部分),或者协助完成其他任务。这是一种跨请求维护状态的方法
另一方面,您可以实现您描述的这种机制。在MVC环境中,此任务将由控制器处理。只有在传递了大量GET参数的情况下,这才有意义。您应该从一开始就尽量避免这种做法。有趣的是,您提到的输入名称是神秘的。我将从一般意义上(不仅仅是PHP细节)回答我在项目中看到的与本主题相关的内容。一般做法:
- 表单变量通常映射到对象。它是PHP中的VO或Java中的Beans。在我看来,这将是最可读的转换形式,因为它为正在转换的HTML表单提供了上下文
- 在许多情况下,我看到了某种表单实用程序帮助类,它将处理到和从的转换。然而,这不是一个特定的硬编码转换,大多数转换都是非常结构化和通用的。例如,它接受所有getter/setter方法并将其用作表单名称。例如,我的对象中可能有
,然后表单实用程序将其转换为getUsername()
李> - 或者,您还可以通过映射覆盖来覆盖默认映射。这可以是以下形式:
- 配置文件,例如,将实例变量映射到表单变量的XML文件。在上面的例子中,这样的映射可以是将username实例变量映射到一个更神秘的形式变量u
- 语言功能,如Java中的注释或C#中的属性。语言特性将允许在不使用配置文件的情况下进行映射,而是在对象源代码本身中进行内联
- 我见过一些项目,它们会为VO/Bean提供基类,这些项目有
和fromForm(input)
,它们利用上述表单实用程序。它为开发人员提供了便利,因此他们不必处理表单实用程序,只需从对象中调用toForm()
和toForm()
,即可处理转换fromForm(input)
- 创建VO对象以表示字段
- 创建映射配置以将神秘字段映射到具有逻辑名称的实际实例变量
- 直接使用Form Utilities helper类,或者如果在基类中使用了Form Utilities,则使用方便的方法
和toForm()
fromForm(input)
$filterVo = new FilterVo();
$filterVo->readableName = $_GET['_f'];