即使在autoload中定义了类,也找不到类,class_exists(" Main")返回未找到

时间:2017-07-04 11:59:01

标签: php class

我正在尝试显示来自Main类的消息,但由于某些原因找不到该类,即使它在index.php

的开头自动加载

autoload.php

return array(
    'App\\Http\\Controllers\\IndexController' => $baseDir . '/app/Http/Controllers/IndexController.php',
    'App\\Http\\Controllers\\Main' => $baseDir . '/app/Http/Controllers/Main.php',
    'App\\Http\\Core\\Controller' => $baseDir . '/app/Http/Core/Controller.php',
    'App\\Http\\Core\\Error' => $baseDir . '/app/Http/Core/Error.php',
    'App\\Http\\Core\\Load' => $baseDir . '/app/Http/Core/Load.php',
    'App\\Http\\Core\\Route' => $baseDir . '/app/Http/Core/Route.php',
    'App\\Http\\Core\\Url' => $baseDir . '/app/Http/Core/Url.php',
    'App\\Http\\Database\\Database' => $baseDir . '/app/Http/Database/Database.php',
    'App\\Http\\Database\\Model' => $baseDir . '/app/Http/Database/Model.php',
);

班级Main.php位于目录app/Http/Controllers

Main.php

namespace App\Http\Controllers;

class Main
{
    function index(){
        echo "Main Index";
    }
}

该类的实例是由我的Route.php创建的,但是现在我尝试将其直接加载到index.php

的index.php

namespace App\Http\Controllers;

use App\Http\Core\Route;

error_reporting(E_ALL);
ini_set("display_errors", 1);

require_once __DIR__ . '/../vendor/autoload.php';

if(class_exists("Main")){
    echo "The class is found!";
} else {
    echo "This class is not found";
}

new Route();

这是

Route.php

namespace App\Http\Core;

class Route
{
    private $routes;

    function __construct()
    {
        $this->routes = array();
        $route = $this->findRoute();
        if(class_exists(__NAMESPACE__ . '\\' . $route["controller"])){
            $conroller = new $route["controller"]();
            if(method_exists($conroller, $route["method"])){
                $conroller->$route["method"]();
            }else{
                Error::show(404);
            }
        }else{
            Error::show(404);
        }
    }

    private function routePart($route){
        if(is_array($route)){
            $route = $route["url"];
        }
        $parts = explode("/", $route);
        return $parts;
    }

    static function uri($part){
        $parts = explode("/", $_SERVER["REQUEST_URI"]);
        if($parts[1] == 'index.php'){
            $part++;
        }
        return (isset($parts[$part])) ? $parts[$part] : "";
    }

    private function findRoute(){
        foreach ($this->routes as $route){
            $parts = $this->routePart($route);
            $allMatch = true;
            foreach ($parts as $key => $value){
                if($value != "*"){
                    if(Route::uri($key) != $value){
                        $allMatch = false;
                    }
                }
            }
            if($allMatch){
                return $route;
            }
        }
        $uri_1 = Route::uri(1);
        $uri_2 = Route::uri(2);
        if($uri_1 == ""){
            $uri_1 = "Main";
        }
        if($uri_2 == ""){
            $uri_2 = "index";
        }
        $route = array(
            "controller" => $uri_1,
            "method" => $uri_2
        );
        return $route;
    }
}

任何提示都会有所帮助,请

0 个答案:

没有答案