使用来自不同类

时间:2017-01-18 08:26:07

标签: php

我在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");
}

2 个答案:

答案 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");
    }