首先我將解釋我正在嘗試做什麼,我正在研究一個php路由器試驗他們如何工作,並在一個對象我instanciating路由器對象和我可以創建路線沒有問題。PHP包括從文件加載器對象沒有保持變量
現在我正在嘗試一些更復雜的事情,我希望能夠從文件夾中包含的文件中加載路由,該文件夾名爲路由,我不會提前知道文件名。這裏仍然沒有問題,很簡單。
做了我的包容,我想,爲什麼要將include包含在對象中,我應該創建一個àfileLoader對象,它將專用於遞歸加載文件夾中的文件。我做了,做了一個新的東西。
現在,當調用我的加載器對象時,應該設置的$ router變量不是,我不能創建路由,因爲未定義的變量。一些代碼的解釋。
這是調用路由器對象的函數:
private function projectRooting(){
$router = new Router\Router($this->baseUri);
$fileLoader = new FileLoader();
$fileLoader -> loadFolder($this->fullDirName, "/routes");
// include_once($this->fullDirName."/routes/web.php");
$router->run();
}
這是從fileLoader功能:
public function loadFolder(string $path, string $directory){
$theDirectory = $path. "/" .$directory;
$files = scandir($theDirectory);
foreach($files as $file){
if(is_file($theDirectory. "/" .$file))
include_once($theDirectory. "/" .$file);
else{
if($file != "." && $file != "..")
$this->loadFolder($path, $directory. "/" .$file);
}
}
}
從包含文件的路由例如:
$router->get("/", function(){echo "Welcome on the home page!";});
現在使用未註釋的代碼,它不起作用,但如果我評論$ fileLoader部分並取消註釋clude_once,一切都會重新開始。
當我從另一個對象調用包含作品的方式時,我是否遺漏了某些東西?
如果您回覆,請提前致謝,對不起我的英文不好。
所以'$ router-> run();'似乎對你沒有定義?你得到一些錯誤? – deFreitas
Nop,$ router-> run()工作正常。不起作用的是由loadFolder include調用的另一個文件中的$ route-> get方法。 –