致命错误:require():需要打开失败

问题描述 投票:0回答:1

出于学习目的,我正在尝试使用PHP创建MVC路由器。

但是,我无法加载要访问的视图。例如,我尝试访问homestead.blog/about,它将返回:

Fatal error: require(): Failed opening required 'controllers/about.php' (include_path='.:/usr/share/php') in /home/vagrant/projects/blog/public/index.php on line 8 

这是我的public / index.php的第8行:

require Router::load('../routes.php')
    ->direct(Request::uri());

这是路线文件:

<?php

$router->define([
    '' => 'public/index.php',
    'about' => 'controllers/about.php',
    'blog' => 'controllers/blog.php',
    'contact' => 'controllers/contact.php'
]);

这些路线绝对准确。 “关于”端点绝对属于“ controllers / about.php”。

这里是路由器对象:

<?php

class Router
{
    protected $routes = [];

    public static function load($file)
    {
        $router = new static;

        require $file;

        return $router;
    }

    public function define($routes)
    {
        $this->routes = $routes;
    }

    public function direct($uri)
    {
        if (array_key_exists($uri, $this->routes)) {
            return $this->routes[$uri];
        }

        throw new Exception('No route defined for this URI.');
    }
}

这是Request对象:

<?php

class Request
{
    public static function uri()
    {
        return trim($_SERVER['REQUEST_URI'], '/');
    }
}

这两个对象在public / index.php中都是必需的。

为什么会出现此错误?

php url model-view-controller
1个回答
0
投票

错误表明/home/vagrant/projects/blog/public/controllers/about.php不存在。

您必须在路由文件(或您指定的文件的require位置)中指定正确的关系或绝对路径。

© www.soinside.com 2019 - 2024. All rights reserved.