首页 文章

如何将值列表传递给方法,Codeigniter样式

提问于
浏览
1

将项目列表2-3项传递给控制器中的方法有什么好方法?我只是想使用URL ....就像这样:

http://myserver/myapp/mycontroller/mymethod/parm1/parm2/listitem1/listitem2/listitem3

有一个更好的方法吗?这些数据不是来自表单,而是来自数据库查询,我正在用它构建一个超链接 .

我想困扰我的唯一部分就是我不会事先知道我在解析这个网址时有多少项目 .

我可能没有,或者三者之间或者之间有一些 Value . 因此,然后必须解析此url的方法将保持循环,直到uri-> segment()返回false,表明它击中了第一个空的uri段 . 任何建议,将不胜感激 .

谢谢

EDIT 1:

为了防止不清楚,我的模型是从数据库中获取数据并且还将构建列表 . 问题实际上是解析未确定数量的uri段 . 只是想知道是否有更好的方法来做到这一点 . 谢谢!

EDIT 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获得的端口列表,这样它们就不会被篡改 .

希望这可以帮助 .

Edit 3

我需要methodA和methodB,因为它们有两个不同的用途 . methodA显示有关我数据库中端口的摘要数据 . 将methodA视为显示关于交换机的 documentation 的函数 . 方法A的视图依次提供了"live"链接以与实际交换机通信 - 这就是方法B的用武之地 . 方法B由其中一个实时链接触发,它会获取端口列表 - 类似于methodA - 除了它代表什么是实际的,并且我认为我不想直接与另一方交谈 . 我希望GUI将它们绑在一起 . 事实上,我已经创建了两个独立的模型和控制器,我称之为数据库接口,然后是交换机接口 . 到目前为止,我认为表单构思是最优雅的解决方案 . 谢谢大家,阅读 .

3 回答

  • 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 .

  • 1

    阅读完所有其他答案的编辑后,这绝对不是你想要的方式 .

    除非我'm misunderstanding your comments, here' s问题:端口列表是存储在服务器上的域数据 . 那么,为什么你要将数据拉出来,将它发送到表示层,然后将它显示给将把它直接发送回应用程序的用户?跳过中间人并获得该数据"MethodB" .

    您的“MethodB”应该在处理它之前获取此信息需要做的是 - 域数据保留在域层中,并且视图永远不会直接看到任何信息(用户会看到直接链接到“MethodB”)

    或者,如果您的数据库架构有助于此类连接,则可以在一个查询中执行此操作 .

  • 0

    将listitems的数量作为参数3

    ../mymethod/parm1/parm2/numberofitems/listitem1/listitem2/listitem3
    

    并根据需要放置1,2或3 . 如果0没有任何东西 - null,但是确保控制器知道如果null发生该怎么办 - 不要期望项目 .

相关问题