2017-02-15 108 views
0

我有一個[root]/composer.json文件下面的類自動加載定義:類沒有找到,作曲家和Zend框架1個自動加載問題

{ 
    ... 
    "autoload": { 
    "psr-0": { 
     "": [ 
     "application/models", 
     "application/controllers", 
     "application/forms", 
     "library/" 
     ] 
    }, 
    "psr-4": { 
     "": ["src/"] 
    }, 
    "classmap": [ 
     "app/AppKernel.php", 
     "app/AppCache.php" 
    ] 
    }, 
    ... 
} 

當我打電話[root]/public_html/index.php頁面我得到了以下錯誤:

PHP Fatal error: Uncaught Error: Class 'classes\DependencyInjection' not found in /var/www/html/application/bootstrap.php:29

是什麼在[root]/public_html/index.php是下面的代碼:

$bootstrap = true; 
require_once '../application/bootstrap.php'; 

,什麼是在[root]/application/bootstrap.php文件是:

// turn on autoloading for classes 
// composer autoloader 
include(MMIPATH.'/vendor/autoload.php'); 

// zend autoload 
require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 

$diContainer = new classes\DependencyInjection(services.yaml'); 
$proxy  = $diContainer->get('containerProxy'); 

這是[root]/library/classes/DependencyInjection.php定義:

use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\Config\FileLocator; 
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; 
USE Symfony\Component\DependencyInjection\Container; 

class DependencyInjection extends ContainerBuilder 
{ 
    .... 
} 

什麼錯在這裏的?爲什麼自動加載器找不到那個類?

回答

0

您正在嘗試加載「類」名稱空間,但是您的類未定義爲處於「類」名稱空間中。

new classes\DependencyInjection(...)在PSR-0負載{paths}\classes\DependencyInjection.php,並嘗試從命名空間classes實例化類DependencyInjection,但DependencyInjection不在classes命名空間。該文件將加載,但該類不存在。

您可以將namespace classes;添加到這些類中的每一個,但這不是一個好的解決方案。更好的解決方案是使用適當的命名空間或將PSR-0列表更改爲包含庫/類並使用new DependencyInjection(...)。 (我的投票是第一個 - 使用適當的命名空間。)

按要求。例如:它使用

文件位置
{app}\library\UsefullNamespace\DependencyInjection.php

呼叫 new UsefullNamespace\DependencyInjection.php

DependencyInjection.php:

namespace UsefullNamespace; 

use [...]; 

class DependencyInjection extends ContainerBuilder 
{ 
+1

而且......如果你不絕對有不使用ZF1至。它完全廢棄/報廢/不再維護。 –

+0

你可以添加一些例子嗎?兩種解決方案? – ReynierPM

+0

增加了 - 替代方案並非真正的解決方案,甚至可能不適用於PSR-0(不確定)。一個有用的命名空間對於您的應用程序來說是非常有意義的。 –