首先我将解释我正在尝试做什么,我正在研究一个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方法。 –