3

私のMVC構造は次のとおりです。

- web
  -- Classes
    --- Loader.php
  -- Core
    --- Controller.php
    --- Model.php
    --- View.php
    --- Bootstrap.php
    --- DB.php
  -- Project
    --- Controllers (folder)
    --- Models (folder)
    --- Views (folder)

これで、それぞれに名前空間が指定されました。たとえば、私は持っています

    namespace Classes; //for Loader.php
    namespace Core; //For Controller.php, Model.php etc...
    namespace Project\Controllers; //For Controllers inside Controllers folder etc...

私のオートローダーは次のようになります。

public static function Autoloader2($className) {
    $className = explode('\\', $className);
    $class = array_pop($className);
    $namespace = implode(DIRECTORY_SEPARATOR, $className);
    $file = $namespace . DIRECTORY_SEPARATOR . str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';

   require $file;
}

そして私の主なindex.phpの使用

    spl_autoload_register( array('Loader', 'Autoloader2') );
    $app = new Core\Bootstrap();

localhost/web/ を開くと、次のエラーが表示されます。

  Warning: require(Core/Project/Controllers/Index.php): failed to open stream: N

要求されたファイルの先頭に Core/ を追加しているようです。Index.php は Project/Controllers 内にあり、Core/Project/Controllers 内にはありません。取り除こうとしたら

  //namespace Core; from Bootstrap.php i get the following error
  Fatal error: Class 'Core\Bootstrap' not found 

助けてください

4

1 に答える 1

2

を使用する必要があります$app = \Core\Bootstrap();

パスの前のスラッシュは重要です。スラッシュがないと、名前空間のパスは互いに相対的になります。

于 2012-09-08T16:43:39.503 に答える