错误的文件' php项目中的路径

时间:2016-01-22 11:27:20

标签: php

这是我的php项目的结构

enter image description here

文件 index.php config.php 位于根文件夹中。

config.php 文件中,我定义了libs文件夹的路径

<?php 

require 'config.php';

function __autoload($class) {
        require LIBS. $class. ".php";
    }

$bootstrap = new Bootstrap();
$bootstrap->init();

//Composer autoloader
require 'vendor/autoload.php';

这是 index.php 文件夹

<?php 

class Bootstrap {
private $_url = null;
private $_controller = null;

private $_controllerPath = '/../controllers/';
private $_modelPath = 'models/';
private $_errorFile = 'error.php';
private $_defaultFile = 'home.php';

public function init(){
    $this->_parseUrl();

    if(empty($this->_url[0])){
        $this->_loadDefaultController();
        return false;
    }   

    $this->_loadExistingController();
    $this->_callControllerMethod(); 
}

private function _parseUrl(){
    $url = isset($_GET['url']) ? $_GET['url'] : null;
    $url = rtrim($url, '/');
    $url = filter_var($url, FILTER_SANITIZE_URL);
    $this->_url = explode('/', $url);
}

private function _loadDefaultController() {
    require $this->_controllerPath . $this->_defaultFile;
    $this->_controller = new Home();
    $this->_controller->index();    
}

private function _loadExistingController() {
    $file = $this->_controllerPath . $this->_url[0] . '.php';
    if(file_exists($file)) {
        require $file;
        $this->_controller = new $this->_url[0];
        $this->_controller->loadModel($this->_url[0], $this->_modelPath);   
    } else {
        $this->_error();
        return false;
    }           
}

private function _callControllerMethod() {
    if(isset($this->_url[2])) {
        if(method_exists($this->_controller, $this->_url[1])) {
            $this->_controller->{$this->_url[1]}($this->_url[2]);
        } else {
            $this->_error();
        }
    } else {
        if(isset($this->_url[1])) {
            if(method_exists($this->_controller, $this->_url[1])) {
                $this->_controller->{$this->_url[1]}();
            } else {
                $this->_error();
            }
        } else {
            $this->_controller->index();
        }
    }
}

private function _error() {
    require $this->_controllerPath . $this->_errorFile;
    $this->_controller = new Error();
    $this->_controller->index();
    exit;
}

}

这是 Bootstrap.php 文件

Bootstrap

问题是,Warning: require(/../views/error/index.php): failed to open stream: No such file or directory in C:\xampp\htdocs\project\app\libs\View.php on line 9 Fatal error: require(): Failed opening required '/../views/error/index.php' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\project\app\libs\View.php on line 9 类以正确的方式检测到Home控制器,但它没有找到其他控制器,例如用户控制器,并尝试使用错误控制器,但没有找到错误索引视图。

Connection.Execute strSQL, 0, adCmdText

我猜道路径有问题,但我不知道如何解决它。如何使Bootstrap找到其他控制器?也许我应该改变项目结构?这是我第一次创造一些东西,所以我只想弄明白。

1 个答案:

答案 0 :(得分:2)

由于您正在创建一个新项目并且已经使用了composer,因此您可以按照PSR-4的自动加载规范进行操作。您无需实施自动加载器。使用composer,您甚至可以使用classmap为不遵循PSR-0/4的项目定义自动加载。但是,如果你开始一个你应该遵循PSR-0/4的新项目,那么classmap自动加载就可以用于旧的遗留代码库。

<小时/> 说,您可以更改当前代码:

更改

for connection in connections:
    try:
        runQuery(connection)
        break;
    except:
        continue;   

DEFINE('LIBS', '/app/Libs/');

define('LIBS', __DIR__ . '/app/Libs/'); magic constant,在这种情况下表示__DIR__目录的绝对路径。我的建议是不要依赖相对路径。出于同样的原因改变

config.php

require $this->_controllerPath . $this->_defaultFile;
// and
require $this->_controllerPath . $this->_errorFile;
// and
$file = $this->_controllerPath . $this->_url[0] . '.php';