簡體   English   中英

控制器內部文件夾內的文件夾無法正常工作(Codeigniter)

[英]Controller inside a folder inside a folder not working (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

但是,當使用子子目錄完成相同的結果時,這會使文件變得非常大。 說得通?

我希望在子文件夾中的許多文件中重新分配它,而不是將所有內容都放在一個控制器文件中。 ...所有文件都可以分散在這個新文件夾中,因為單個文件中不需要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/

根據文件

如果要構建大型應用程序,則可能需要按層次結構將控制器組織或構建到子目錄中。 CodeIgniter允許您執行此操作。

只需在主application/controllers/ one下創建子目錄,然后將控制器類放在其中。

使用此功能時,URI的第一段必須指定文件夾。

每個子目錄可能包含一個默認控制器,如果URL僅包含子目錄,則將調用該控制器。 只需在其中放置一個與application/config/routes.php文件中指定的default_controller名稱相匹配的控制器。

CodeIgniter還允許您使用URI路由功能重新映射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 ,您可以實現您希望的任何復雜URL ...

$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';

好的,所以我想出了使用路線的解決方案。 雖然我不明白為什么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。 當當!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM