将项目列表2-3项传递给控制器中的方法有什么好方法? 我正在考虑使用URL ....就像这样:
http://myserver/myapp/mycontroller/mymethod/parm1/parm2/listitem1/listitem2/listitem3
有更好的方法吗?这些数据不是来自表单,而是来自数据库查询,我正在用它构建一个超链接。
我想唯一令我烦恼的部分是我在预解这个网址时我不会事先知道有多少项目。
我可能会得到没有,或者三者之间或某些值。因此,然后必须解析此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针对交换机运行命令,它返回一堆数据。显示来自methodB的数据的视图将允许最终用户对交换机进行进一步的更改。在我显示来自methodB的数据之前,我想过滤掉我从methodA获得的端口列表,这样它们就不会被篡改。
希望这有帮助。
编辑3
我需要methodA和methodB,因为它们有两个不同的用途。 methodA显示有关我数据库中端口的摘要数据。将methodA视为显示关于交换机的文档的函数。反过来,方法A的视图提供“实时”链接以与实际交换机通信 - 这是方法B的用武之地。方法B由其中一个实时链接触发,并且它获取并获得端口列表 - 类似于方法A - 除了它代表什么是实际的,它不包括有关端口的用户定义信息。 我想我可以让methodB与我的数据库进行通信并在显示之前过滤其数据,但如果我想将这两个函数视为单独的API ...又称 - 一组函数从数据库中获取数据,另一组是一个与交换机通信的工具...... - 然后我认为我不想直接与另一个交谈。我希望GUI将它们绑在一起。事实上,我已经创建了两个独立的模型和控制器,我称之为数据库接口,然后是交换机接口。 到目前为止,我认为表单构思是最优雅的解决方案。 谢谢大家,阅读。
答案 0 :(得分:1)
将listitems的数量作为参数3
../mymethod/parm1/parm2/numberofitems/listitem1/listitem2/listitem3
并根据需要放置1,2或3。如果0没有任何东西 - null,但是确保控制器知道如果null发生该怎么办 - 不要期望项目。
答案 1 :(得分:0)
如果您希望您的应用程序真正符合MVC,那么如果数据来自查询,它应该在CodeIgniter中的模型中。这可能意味着对您的应用程序进行重组,这可能很困难但是将来为您的所有数据库查询创建模型将会非常有益。
您可以在此处阅读codeigniter模型: http://codeigniter.com/user_guide/general/models.html
您可以在此处阅读数据库课程:http://codeigniter.com/user_guide/database/index.html
我真的建议你这样做。
如果您的数据来自模型,您可以通过包含模型来调用它:
$this->load->model('model_name');
$response = $this->model_name->model_function(parameters);
编辑:这也可以解决未知数量的列表项的问题,因为您可以简单地解析从模型函数返回的响应,而不是试图找出一个uri hack。
答案 2 :(得分:0)
在阅读了所有其他答案+编辑后,这绝对是不你想要的方式。
除非我误解你的评论,否则问题出在此:端口列表是存储在服务器上的域数据。那么为什么你要把数据拉出来,把它发送到表示层,并将它显示给将发送回应用程序的用户?跳过中间人并让“MethodB”获取该数据。
您的“MethodB”应该在处理它需要做的事情之前获取此信息 - 域数据保留在域层中,并且视图永远不会直接看到任何信息(用户会看到直接链接到“MethodB”的链接) )
或者,如果您的数据库架构有利于此类连接,则可以在一个查询中执行此操作。