jijun 发表于 2017-3-3 15:25:43

控制器放入子目录,怎么调用子目录中的类?

刚接触到CI,看到原文如下:

将控制器放入子目录中
如果你正在构建一个比较大的应用,那么将控制器放到子目录下进行组织可能会方便一点。CodeIgniter 也可以实现这一点。
你只需要简单的在 application/controllers/ 目录下创建新的目录,并将控制器文件放到子目录下。
注解:
当使用该功能时,URI 的第一段必须制定目录,例如,假设你在如下位置有一个控制器:
application/controllers/products/Shoes.php
为了调用该控制器,你的 URI 应该像下面这样:
example.com/index.php/products/shoes/show/123

我的理解:
上面一句的意思就是调用products类的shoes方法,参数是show和123

如何去调用到application/controllers/products/Shoes.php这个类呢?我测试不通,谁能解释或举例演示下,谢谢!

Hex 发表于 2017-3-3 16:57:40

你为什么要去调用这个类呢?CI 里你不需要这样做,你访问了类的方法,不就等于访问类了么?不知道你的具体需求是什么?

具体请参考 http://codeigniter.org.cn/user_guide/general/urls.html ,使用 CI 的时候一定要先看一遍手册,不要想当然。

jijun 发表于 2017-3-4 08:21:15

本帖最后由 jijun 于 2017-3-4 08:22 编辑

Hex 发表于 2017-3-3 16:57
你为什么要去调用这个类呢?CI 里你不需要这样做,你访问了类的方法,不就等于访问类了么?不知道你的具体 ...
我是看了参照手册中的将控制器放入子目录中,才有此一问的,我感觉是没有讲清楚,想自己实现一下,发现实现起来有问题,我自己猜想是不是3.1的版本不支持controllers下建子目录放控制器了?

jadexo 发表于 2017-3-4 16:15:39

我理解你的意思是希望能将控制的某一个功能用多个类来进行管理对吧,然后把相同业务的类放在一个控制目录下进行区分。

假设一个票务系统 控制器A 和 控制器B 都是票务管理的逻辑。你是希望这样放
controllers/ticket/ClassA
controllers/ticket/ClassB

如果是这样的话,访问的URI 应该是

http://deamon/index.php/ticket/classA/methodName
http://deamon/index.php/ticket/classB/methodName

在URI中 ticket 其实是文件夹名称然后再是类名。

同你的例子中一样

application/controllers/products/Shoes.php

中的URIhttp://example.com/index.php/products/shoes/show/123

中的products其实就是文件夹名称:lol

你可以自己code一样,不要老死看着文字描述

lisheng51 发表于 2017-3-5 04:00:01

其实,只要你的文件夹名称没和控制器的名称一样就行

jijun 发表于 2017-3-6 10:36:55

本帖最后由 jijun 于 2017-3-6 10:38 编辑

非常感谢大家的回复,我找到我测试不成功的原因了,
是访问URL的问题,我开始是用http://test.whinfo.net.cn/index.php/products/shoes/canshu/123
自认为index方法是默认的,但测试却是不行,应该是CI在有子目录的情况下分辨不了默认的方法index,正确的访问URL如下:
http://test.whinfo.net.cn/index.php/products/shoes/index/canshu/123

附件是我的测试的截图,给有疑问的朋友参考!

Hex 发表于 2017-3-6 17:17:03

jijun 发表于 2017-3-6 10:36
非常感谢大家的回复,我找到我测试不成功的原因了,
是访问URL的问题,我开始是用http://test.whinfo.net.c ...

你的写法是正确的,但是原因是如果传了参数,那方法名是不能省略的,不管方法名是不是 index。
页: [1]
查看完整版本: 控制器放入子目录,怎么调用子目录中的类?