【发布时间】:2012-09-26 20:28:13
【问题描述】:
将项目 2-3 项目列表传递给控制器中的方法的好方法是什么? 我正在考虑只使用 URL.... 像这样:
http://myserver/myapp/mycontroller/mymethod/parm1/parm2/listitem1/listitem2/listitem3
有没有更好的方法来做到这一点?这些数据不是来自表单,而是来自数据库查询,我正在用它建立一个超链接。
我想唯一困扰我的部分是我在解析这个 url 时不会提前知道我有多少项目。
我可能什么都得不到,或者全部 3 个或介于两者之间的某个值。因此,必须解析此 url 的方法将继续循环,直到 uri->segment() 返回 false,表示它已命中第一个空 uri 段。 任何建议将不胜感激。
谢谢
编辑 1:
以防万一,我的模型正在从数据库中获取数据,并且还将构建列表。 问题实际上是关于解析未确定数量的 uri 段。 只是想知道是否有更好的方法来做到这一点。 谢谢!
编辑 2
这里有更多信息可以帮助您了解我的 MVC 应用程序。我不认为我的问题是我组织代码的方式,因为谁在做什么......但以防万一它有帮助......
我的模型中有methodA,它查询数据库并传回我的控制器listitem1、listitem2 和listitem2。 然后控制器构建一个代表 URL 的字符串,例如:
http://myserver/myapp/mycontroller/methodB/parm1/parm2/listitem1/listitem2/listitem3
然后视图使用上面的 url 显示一个超链接。 当用户点击这个超链接时,它会调用methodB。 在方法B中,由于我不知道项目的数量,我将遍历所有段,直到我遇到第一个错误。
至于我为什么需要这样做/我在做什么......这里有一些背景信息: 我正在数据库中查询交换机上被视为中继的端口列表 - 不应修改的端口。 这就是方法 A 所做的。
methodB 对交换机运行命令并返回一堆数据。显示来自方法 B 的数据的视图将允许最终用户对开关进行进一步的更改。在显示来自 methodB 的数据之前,我想过滤掉从 methodA 获得的端口列表,这样它们就不会被篡改。
希望这会有所帮助。
编辑 3
我需要 methodA 和 methodB 因为它们有两个不同的目的。 methodA 显示我的数据库中有关端口的摘要数据。将 methodA 视为显示有关开关的文档的函数。反过来,methodA 的视图提供了与实际交换机通信的“实时”链接——这是 methodB 的来源。methodB 由这些实时链接之一触发,它会获取端口列表——类似于 methodA——除了它代表实际情况,并且不包括有关端口的用户定义信息。 我想我可以让methodB与我的数据库通信并在它显示之前过滤它的数据,但是如果我想将这两个函数视为单独的API......也就是一组函数从数据库中获取数据,另一组是一种与交换机通信的工具...... - 那么我认为我不希望一个人直接与另一个人交谈。我希望 GUI 将它们联系在一起。事实上,我已经创建了两个独立的模型和控制器,我将称之为数据库接口,然后是切换接口。 到目前为止,我认为表单的想法是最优雅的解决方案。 谢谢大家,阅读。
【问题讨论】:
-
2-3 个项目的列表是从视图(客户端)通过 http 还是什么?
-
@Esben Tind - 它来自模型。我想我提到它来自数据库查询。
-
根据您提供给我们的信息,没有比这更好的方法了 - 如果不了解您为什么需要这么多细分市场和/或它们的用途的更多细节,就很难提供替代方案或“重新设计一切”以外的具体建议
-
@orourkek - 我更新了我的帖子。查看 Edit 2 - 在底部
-
将超链接转换为表单并使用 _POST 将所需数据发送到控制器上的函数可能更容易,因此您根本不必处理 uri。您还可以在 onclick 事件中使用 ajax 请求来执行此操作。
标签: php codeigniter