我在App.php类中的一个功能,它位于根目录的App文件夹中。该函数需要实例化一个控制器类,该控制器类位于App / Controllers文件夹内,显然具有不同的命名空间。
通过控制器名称调用新类时出现以下错误: 我不明白为什么它在App.php类中寻找类PageController.php。
(!)致命错误:未捕获错误:Class' PagesController.php'在第36行的D:\ wamp64 \ www \ app \ App.php中找不到
public function renderPage($page, $route) {
$this->page = $page;
if(file_exists(CONTROLLERS . '/' . $route['controller'] . '.php')) {
$controllerFile = $route['controller'] . '.php';
$controller = new $controllerFile();
echo 'YES CONTROLLER!';
} else {
echo 'no :<';
}
echo $this->plates->render("pages::$page");
}
答案 0 :(得分:1)
首先,检查文件是否存在,但从不包含该文件以便以后使用它的文件。
稍后您有控制器文件名$route['controller'] . '.php'
并尝试将其称为new $route['controller'] . '.php';
- 这是错误。
您需要加入它:
$controllerFile = CONTROLLERS . '/' . $route['controller'] . '.php';
if(file_exists($controllerFile)) {
require_once($controllerFile);
$controller = new $route['controller']();
echo 'YES CONTROLLER!';
}
我不明白为什么它在App.php类中寻找类PagesController.php
因为$route['controller']
包含PageController
字符串。
答案 1 :(得分:0)
我最终得到了一个解决方案;
您必须使用\ slash附加命名空间并通过转义它。所以现在它可以使用命名空间。
public function renderPage($page, $route) {
$this->page = $page;
$controllerFile = CONTROLLERS . '/' . $route['controller'] . '.php';
if(file_exists($controllerFile)) {
require (CONTROLLERS . '/' . $route['controller'] . '.php');
$class = __NAMESPACE__ . '\\controllers\\' . $route['controller'];
$controller = new $class();
}
echo $this->plates->render("pages::$page");
}