控制器内部文件夹内的文件夹无法正常工作(Codeigniter)

时间:2016-07-06 15:34:09

标签: php codeigniter

我在使用codeigniter方面表现不错,但现在我遇到了一些麻烦。我希望在子文件夹中的许多文件中重新分配它,而不是将所有内容都放在一个控制器文件中。例如:

本地主机/ folderA / FolderB中/ controllerFile

这样,文件夹B替换了控制器的主文件,所有文件都可以分散在这个新文件夹中,因为在一个文件中不需要有10个不同的控制器功能(你知道它很大)

在路线中我添加了一个新行

$ route [' folderA / folderB /(:any)/'] =' folderA / folderB';

我甚至不认为添加路线甚至是必要的,但它不起作用,无论如何总是得到404页。现在,如果我把它带回文件夹,控制器的代码完全相同。这意味着 / folderA / folderB / controllerFile 可以在 / folderA / controllerFile 中使用而无需担心。

我的目标不是将这些文件移到目录上,而是保持结构与以前一样。有没有人为这样的事情而生气?我这么想......哈哈

感谢阅读!

编辑:为了澄清这是正在进行的事情:

  /application/controllers/file.php (OK)
  /application/controllers/folderA/file.php (OK)
  /application/controllers/folderA/folderB/file.php (This does not work)

我可以执行/application/controllers/folderA/file.php并拥有其中的所有函数,因此它的工作原理如下:

localhost/folderA/file
localhost/folderA/file/functionb
localhost/folderA/file/functionc

但是,当使用子子目录完成相同的结果时,这会使文件变得非常大。有意义吗?

2 个答案:

答案 0 :(得分:5)

  

我希望在子文件夹中的许多文件中重新分配它,而不是将所有内容都放在一个控制器文件中。 ...所有文件都可以分散在这个新文件夹中,因为单个文件中不需要10个不同的控制器功能。

您已经可以将函数放在名为controllers的一个目录下的多个控制器文件中。从来没有要求将所有功能都放在一个控制器文件中。

默认情况下,所有控制器都存储在controllers目录...

/application/controllers/

示例:

/application/controllers/Users.php
/application/controllers/Auth.php
/application/controllers/Etc.php
  

我甚至认为添加路线甚至是必要的,但它无法正常工作,无论如何都会得到404页。

如果要使用控制器的子目录,则这些子目录必须包含在controllers目录中,您需要按照文档进行操作。

/application/controllers/subfolderA/
/application/controllers/subfolderB/

As per the documentation

  

如果要构建大型应用程序,则可能需要按层次结构将控制器组织或构建到子目录中。 CodeIgniter允许您这样做。

     

只需在主application/controllers/下创建子目录,然后将控制器类放在其中。

     

使用此功能时,URI的第一段必须指定文件夹。

     

每个子目录都可能包含一个默认控制器,如果URL只包含子目录,则会调用该控制器。只需在控制器中放置一个与default_controller文件中指定的application/config/routes.php名称相匹配的控制器。

     

CodeIgniter还允许您使用其URI Routing功能重新映射您的URI。

修改

  

我可以做/application/controllers/folderA/file.php并拥有其中的所有功能,所以它的工作原理如下:

localhost/folderA/file
localhost/folderA/file/functionb
localhost/folderA/file/functionc
  

但是当使用子子目录完成相同的结果时,会使文件变得非常大。有意义吗?

为什么要继续谈论单个大文件"?您可以根据需要将功能分解为任意数量的控制器文件,而无需任何子目录。

/application/controllers/Users.php
/application/controllers/Auth.php
/application/controllers/Etc.php

分别通过URL访问

/users/function_foo
/auth/function_bar
/etc/function_foobar

然后使用routes.php,您可以实现您希望的任何复杂网址......

$route['foldera/testPage/testing'] = 'users/function_foo';

但是,如果要在controllers目录中使用子目录...

/application/controllers/subdirectory/Controller_a.php

通过URL访问为...

/subdirectory/controller_a/some_function

可以重新路由为任何你想要的 ...

$route['foo/bar/anything/here/tester/foobar'] = 'subdirectory/controller_a/some_function';

答案 1 :(得分:1)

好的,所以我使用路线找出解决方案。虽然我不明白为什么codeigniter不允许3级文件夹,但我最终做的是在 / application / controllers / test / 中创建一个新文件夹,并在我的文件夹中我的 test.php 文件。

然后我回到路线配置文件并添加以下行:

$route['foldera/testPage/testing'] = 'test/test';

当您将浏览器定向到页面

时,这实际上是做什么的
http://localhost/foldera/testPage/testing

它会将该页面视为/application/controllers/test/test.php

中的内容

它基本上给它一个别名。但是,如果你去localhost / test / test它将没有问题,并将它与foldera / testPage / testing.php完全相同为了解决这个小问题,只需在路由配置文件中添加另一行

$route['test/test'] = 'notfound'; // Your 404 page controller

现在访问该文件夹的唯一方法是直接从您想要的URL。当当!