我正在制作一个简单的应用程序来管理员工的任务,称为WorkerManager。起初,我有以下结构:
workermanager
|-index.php
|
|-user
| |-dao
| | |-UserDAO.php
| |-model
| |-view
|-task
| |-dao
| |-model
| |-view
|-department
| |-dao
| |-model
| |-view
...
因此,UserDAO.php位于workermanager/user/dao/
,我使用require_once './user/dao/UserDAO.php'
包含它。
后来,我决定改变项目的结构,并做了这样的事情:
workermanager
|-index.php
|
|-dao
| |-user
| | |-UserDAO.php
| |-task
| |-department
|-model
| |-user
| |-task
| |-department
|-view
| |-user
| |-task
| |-department
...
为此,我创建了文件夹,在 NetBeans Projects 窗格中拖放。从那时起,我无法包含UserDAO.php
(或任何其他更改位置的文件(。函数file_exists('./dao/user/UserDAO.php')
返回 false。当我使用 $_SERVER['DOCUMENT_ROOT'].'/workermanager/dao/user/UserDAO.php'
echo
文件位置时,它会给出正确的路径,但是当我尝试以这种方式include
或require
它时,它不起作用。我试图删除这个项目并使用现有资源制作一个新项目,但它仍然不起作用。
任何想法我能做什么?
下次当我决定更改树结构时,我是否应该在 NetBeans 外部执行此操作?有没有办法让 NetBeans "扫描"项目结构并"学习"新路径?
我正在使用NetBeans 8.1,Apache 2.4.18,Ubuntu 16.04
谢谢。
编辑:有点跑题...在这样的项目中,如果我为每个实体有一个"模型"、一个"DAO"和一个或多个"视图"文件,你更喜欢什么结构?是否有关于项目树形状的"最佳实践"?
编辑 2:我刚刚创建了一个具有以下结构的新项目:
shoppinglist
|-index.php
|...
|-list
| |-ShoppingList.php
| |-ShoppingListController.php
| |-create-new-list.php
| |-edit-list.php
|...
...
在index.php
我有require_once './list/ShoppingListController.php';
,它工作得很好。但是在list/edit-list.php
我有完全相同的行,它不起作用。我也试图只要求/包含'ShoppingListController.php'
,以及$_SERVER['DOCUMENT_ROOT'].'/shoppinglist/list/ShoppingListController.php'
,但仍然没有。谁能告诉我发生了什么???
Apache 可能缓存了你的 index.php 文件,并且仍然使用旧路径。你应该检查一下。
Netbeans 只是一个更改文件的 IDE。Netbeans 在这里没有问题,您也可以使用记事本来更改这些路径,从项目的角度来看,这是相同的。
我终于找到了解决方案!
在每一个include
或require
,我都以'./'
开始了这条道路。我以为这是我网站的根目录,但它是当前文件夹。所以,在index.php
中使用'./list/ShoppingListController.php'
是可以的,但它不应该在edit-list.php
中使用,它与ShoppingListController.php
位于同一文件夹中。
解决方案是在每个include
或require
的开头使用dirname(__FILE__)
,然后连接路径的其余部分。
例如,在index.php
中,我有:
require_once dirname(__FILE__).'/list/ShoppingListController.php';
。而在edit-list.php
我有:
require dirname(__FILE__).'/ShoppingListController.php';
在ShoppingListController.php
中,我需要包含几个文件,所以我有:
require_once dirname(__FILE__).'/../db/DBConnection.php';
require_once dirname(__FILE__).'/ShoppingList.php';
require_once dirname(__FILE__).'/../article/Article.php';
这解决了我的问题,现在一切都完美:)