2017-02-15 106 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(不确定)。一个有用的命名空间对于您的应用程序来说是非常有意义的。 –